网站开发老是弹广告,旅游网站建设网站目的,外贸跟单员的工作内容,做网站图片多大这些是 Selenium Python 库中的模块、类和异常#xff0c;用于实现自动化 Web 浏览器测试和网页操作。以下是它们的简单解释#xff1a;Python Module Index — Selenium 4.18.1 documentation
1. selenium.common.exceptions#xff1a;包含了 Selenium 中可能出现的异常。…这些是 Selenium Python 库中的模块、类和异常用于实现自动化 Web 浏览器测试和网页操作。以下是它们的简单解释Python Module Index — Selenium 4.18.1 documentation
1. selenium.common.exceptions包含了 Selenium 中可能出现的异常。
2. selenium.webdriver.chrome.options用于配置 Chrome 浏览器的选项。
3. selenium.webdriver.chrome.service用于管理 Chrome 浏览器的后台服务。
4. selenium.webdriver.chrome.webdriverChrome 浏览器的 WebDriver 实现。
5. selenium.webdriver.chromium.options用于配置 Chromium 浏览器的选项。
6. selenium.webdriver.chromium.remote_connection与远程 Chromium 浏览器进行连接的类。
7. selenium.webdriver.chromium.service用于管理 Chromium 浏览器的后台服务。
8. selenium.webdriver.chromium.webdriverChromium 浏览器的 WebDriver 实现。
9. selenium.webdriver.common.alert用于处理网页中的弹出框。
10. selenium.webdriver.common.by用于定位网页元素的方法。
11. selenium.webdriver.common.desired_capabilities用于设置 WebDriver 的期望参数。
12. selenium.webdriver.common.keys包含了键盘按键的常量。
13. selenium.webdriver.common.log用于配置 Selenium 日志记录。
14. selenium.webdriver.common.optionsWebDriver 的选项设置。
15. selenium.webdriver.common.print_page_options打印页面时的选项设置。
16. selenium.webdriver.common.proxy用于配置代理服务器的选项。
17. selenium.webdriver.common.serviceWebDriver 的服务设置。
18. selenium.webdriver.common.timeoutsWebDriver 的超时设置。
19. selenium.webdriver.common.utilsWebDriver 的实用工具函数。
20. selenium.webdriver.common.virtual_authenticator用于模拟身份验证的虚拟身份验证器。
21. selenium.webdriver.common.window用于管理浏览器窗口的选项。
22. selenium.webdriver.edge.options用于配置 Edge 浏览器的选项。
23. selenium.webdriver.edge.service用于管理 Edge 浏览器的后台服务。
24. selenium.webdriver.edge.webdriverEdge 浏览器的 WebDriver 实现。
25. selenium.webdriver.firefox.remote_connection与远程 Firefox 浏览器进行连接的类。
26. selenium.webdriver.firefox.service用于管理 Firefox 浏览器的后台服务。
27. selenium.webdriver.remote.bidi_connection双向通信连接的类。
28. selenium.webdriver.remote.command用于执行远程 WebDriver 命令的类。
29. selenium.webdriver.remote.errorhandler处理远程 WebDriver 错误的类。
30. selenium.webdriver.remote.file_detector用于处理文件上传的类。
31. selenium.webdriver.remote.mobile用于配置移动设备的选项。
32. selenium.webdriver.remote.remote_connection与远程 WebDriver 进行连接的类。
33. selenium.webdriver.remote.script_key脚本密钥管理的类。
34. selenium.webdriver.remote.shadowroot用于处理 Shadow DOM 的类。
35. selenium.webdriver.remote.switch_to用于切换浏览器上下文的类。
36. selenium.webdriver.remote.utils远程 WebDriver 的实用工具函数。
37. selenium.webdriver.remote.webdriver远程 WebDriver 的实现。
38. selenium.webdriver.remote.webelement远程 WebElement 的实现。
39. selenium.webdriver.support.abstract_event_listener抽象事件监听器的类。
40. selenium.webdriver.support.color用于处理颜色的工具函数。
41. selenium.webdriver.support.event_firing_webdriver支持事件驱动的 WebDriver。
42. selenium.webdriver.support.expected_conditions用于等待条件满足的工具函数。
43. selenium.webdriver.support.relative_locator相对定位器的类。
44. selenium.webdriver.support.select用于操作下拉框的类。
45. selenium.webdriver.support.wait用于等待页面元素加载完成的类。
-----------------------------------------
----------selenium.webdriver.support.wait.WebDriverWait 类主要包含以下外部使用的方法 1. __init__(driver, timeout, poll_frequency0.5, ignored_exceptionsNone): 构造函数接受一个 WebDriver 实例和超时时间以秒为单位作为参数。driver 参数是 WebDriver 的实例如 IeFirefoxChrome 或 Remote或 WebElement。timeout 参数是在超时前的秒数。poll_frequency 参数是调用之间的休眠间隔默认为0.5秒。ignored_exceptions 参数是在调用期间忽略的异常类的可迭代结构默认只包含 NoSuchElementException。 示例 from selenium.webdriver.support.wait import WebDriverWait element WebDriverWait(driver, 10).until(lambda x: x.find_element(By.ID, someId)) is_disappeared WebDriverWait(driver, 30, 1, (ElementNotVisibleException)).until_not(lambda x: x.find_element(By.ID, someId).is_displayed()) 2. until(method, message): 调用提供的方法该方法将驱动程序作为参数直到返回值不为 False。参数 method 是一个可调用的 WebDrivermessage 是可选的 TimeoutException 消息。如果超时将引发 selenium.common.exceptions.TimeoutException 异常。 3. until_not(method, message): 调用提供的方法该方法将驱动程序作为参数直到返回值为 False。参数 method 是一个可调用的 WebDrivermessage 是可选的 TimeoutException 消息。如果超时将引发 selenium.common.exceptions.TimeoutException 异常。这些方法可以与 expected_conditions 类中的方法一起使用以等待某个条件成立或不成立。例如等待元素可见、等待元素可点击、等待元素被选中等。这对于处理动态加载的页面或者需要等待某个操作完成的情况非常有用。
-------------------如下这些方法主要用于 WebDriverWait 类的实例以等待某个条件成立。例如等待元素可见、等待元素可点击、等待元素被选中等。这对于处理动态加载的页面或者需要等待某个操作完成的情况非常有用。 以下是 selenium.webdriver.support.expected_conditions 类中主要供外部使用的方法 1. alert_is_present(): 检查是否当前存在警告并切换到它。 2. all_of(*expected_conditions): 所有的期望条件都为真。 3. any_of(*expected_conditions): 任意一个期望条件为真。 4. element_attribute_to_include(locator, attribute_): 检查给定的属性是否包含在指定的元素中。 5. element_located_selection_state_to_be(locator, is_selected): 定位元素并检查其选中状态是否与给定的状态匹配。 6. element_located_to_be_selected(locator): 检查定位到的元素是否被选中。 7. element_selection_state_to_be(element, is_selected): 检查给定的元素是否被选中。 8. element_to_be_clickable(mark): 检查元素是否可见且可点击。 9. element_to_be_selected(element): 检查元素是否被选中。 10. frame_to_be_available_and_switch_to_it(locator): 检查给定的框架是否可用并切换到它。 11. invisibility_of_element(element): 检查元素是否不可见或不在DOM上。 12. invisibility_of_element_located(locator): 检查元素是否不可见或不在DOM上。 13. new_window_is_opened(current_handles): 期望新窗口被打开并且窗口句柄数量增加。 14. none_of(*expected_conditions): 所有的期望条件都为假。 15. number_of_windows_to_be(num_windows): 期望窗口数量为特定值。 16. presence_of_all_elements_located(locator): 检查网页上是否至少存在一个元素。 17. presence_of_element_located(locator): 检查页面的DOM上是否存在元素。 18. staleness_of(element): 等待元素不再附加到DOM上。 19. text_to_be_present_in_element(locator, text_): 检查给定的文本是否在指定的元素中。 20. text_to_be_present_in_element_attribute(locator, attribute_, text_): 检查给定的文本是否在元素的属性中。 21. text_to_be_present_in_element_value(locator, text_): 检查给定的文本是否在元素的值中。 22. title_contains(title): 检查标题是否包含特定的子串。 23. title_is(title): 检查页面的标题。 24. url_changes(url): 检查当前的url。 25. url_contains(url): 检查当前的url是否包含特定的子串。 26. url_matches(pattern): 检查当前的url。 27. url_to_be(url): 检查当前的url。 28. visibility_of(element): 检查已知存在于页面DOM上的元素是否可见。 29. visibility_of_all_elements_located(locator): 检查所有元素是否存在于页面的DOM上且可见。 30. visibility_of_any_elements_located(locator): 检查至少有一个元素在网页上可见。 31. visibility_of_element_located(locator): 检查元素是否存在于页面的DOM上且可见。
---------------------------------------WebElement 类是 Selenium 中一个非常重要的类它代表了网页中的一个元素。WebElement 类提供了一系列的方法和属性让我们能够与网页上的元素进行交互。 在 selenium.webdriver.remote.webelement.WebElement 类中以下是主要供外部使用的方法和属性 方法 1. clear(): 清除文本输入元素的文本。 2. click(): 点击元素。 3. find_element(byid, valueNone): 根据给定的定位策略和定位器找到元素。 4. find_elements(byid, valueNone): 根据给定的定位策略和定位器找到一组元素。 5. get_attribute(name): 获取元素的给定属性或属性。 6. get_property(name): 获取元素的给定属性。 7. is_displayed(): 元素是否对用户可见。 8. is_enabled(): 返回元素是否启用。 9. is_selected(): 返回元素是否被选中。可以用来检查复选框或单选按钮是否被选中。 10. screenshot(filename): 将当前元素的屏幕截图保存为 PNG 图像文件。 11. send_keys(*value): 模拟在元素中输入。 12. submit(): 提交表单。 属性 1. location: 元素在可渲染画布中的位置。 2. rect: 包含元素大小和位置的字典。 3. size: 元素的大小。 4. tag_name: 此元素的 tagName 属性。 5. text: 元素的文本。 这些方法和属性使得我们可以在自动化测试、网页爬虫等场景中方便地对网页元素进行操作和提取信息。************** get_attribute(name)方法可以用来获取元素的指定属性或属性值其中name参数表示要获取的属性名称。 以下是一些常见的HTML属性名称你可以使用 get_attribute(name) 方法获取这些属性的值 1. class: 元素的类名。 2. id: 元素的唯一标识符。 3. name: 元素的名称。 4. value: 元素的值对于输入字段这是输入字段的内容。 5. type: 元素的类型例如对于input标签类型可能为text、checkbox、radio、button等。 6. href: 对于链接元素a标签这是链接的URL。 7. src: 对于图像元素img标签或脚本元素script标签这是资源的URL。 8. alt: 对于图像元素img标签这是图像的替代文本。 9. title: 元素的标题通常在鼠标悬停时显示。 10. style: 元素的内联CSS样式。 11. disabled: 表示元素是否被禁用。 12. checked: 对于复选框或单选按钮表示是否被选中。 13. readonly: 表示元素是否为只读。 14. placeholder: 输入字段的占位符文本。 这些只是最常见的一些属性实际上HTML元素可能有更多的属性具体取决于元素的类型和它在页面中的用途。同时也可以获取自定义属性的值。 -------------------
Selenium的WebDriver类是一个用于操作浏览器的接口。WebDriver 是 Selenium 中的一个核心类它是所有页面交互的入口。你可以使用它来打开网页、获取网页元素、与网页元素交互如输入文本、点击按钮等等。 以下是 selenium.webdriver.chrome.webdriver.WebDriver 类中主要供外部使用的方法和属性 方法 1. add_cookie(cookie_dict): 添加一个 cookie 到当前会话。 2. back(): 在浏览器历史中后退一步。 3. close(): 关闭当前窗口。 4. delete_all_cookies(): 删除会话范围内的所有 cookies。 5. delete_cookie(name): 删除给定名称的单个 cookie。6. execute_script(script, *args): 在当前窗口/框架中同步执行 JavaScript。 7. find_element(byid, value): 根据给定的定位策略和定位器找到元素。 8. find_elements(byid, value): 根据给定的定位策略和定位器找到一组元素。 9. forward(): 在浏览器历史中前进一步。10. get(url): 在当前浏览器会话中加载网页。 11. get_cookie(name): 通过名称获取单个 cookie。 12. get_cookies(): 返回当前会话中可见的一组 cookies。 13. get_screenshot_as_base64(): 以 base64 编码字符串的形式获取当前窗口的截图。 14. get_screenshot_as_file(filename): 将当前窗口的截图保存为 PNG 图像文件。 15. get_screenshot_as_png(): 以二进制数据的形式获取当前窗口的截图。 16. get_window_position(windowHandlecurrent): 获取当前窗口的 x, y 位置。 17. get_window_rect(): 获取当前窗口的 x, y 坐标以及高度和宽度。 18. get_window_size(windowHandlecurrent): 获取当前窗口的宽度和高度。 19. implicitly_wait(time_to_wait): 设置隐式等待时间。 20. maximize_window(): 最大化当前 webdriver 使用的窗口。 21. refresh(): 刷新当前页面。 22. save_screenshot(filename): 将当前窗口的截图保存为 PNG 图像文件。 23. set_window_position(x, y, windowHandlecurrent): 设置当前窗口的 x, y 位置。 24. set_window_rect(xNone, yNone, widthNone, heightNone): 设置当前窗口的 x, y 坐标以及高度和宽度。 25. set_window_size(width, height, windowHandlecurrent): 设置当前窗口的宽度和高度。 26. quit(): 关闭浏览器并关闭 ChromiumDriver 可执行文件。 属性 1. current_url: 获取当前页面的 URL。 2. current_window_handle: 返回当前窗口的句柄。 3. name: 返回此实例的底层浏览器名称。 4. page_source: 获取当前页面的源码。 5. title: 返回当前页面的标题。 6. window_handles: 返回当前会话中所有窗口的句柄。 注意这个列表仅包括最常用的方法和属性还有许多其他方法和属性也可以在特定情况下使用。 *********execute_script(script, *args) 方法是 Selenium WebDriver 提供的一个非常强大的功能它允许用户在当前窗口或框架中执行 JavaScript 代码。该方法接受两个参数
script: 要执行的 JavaScript 代码以字符串形式传递。*args: 可选参数用于传递 JavaScript 代码中所需的参数。
这个方法可以用于执行各种 JavaScript 操作比如修改页面元素的属性、执行复杂的 DOM 操作、触发事件、获取页面信息等等。用户可以编写自己的 JavaScript 代码然后通过 execute_script 方法来执行它。 **********
当调用 get 方法时Chrome WebDriver 将会启动一个新的 Chrome 浏览器实例如果没有已经运行的实例然后在该浏览器中加载指定的 URL。如果已经有一个 Chrome 浏览器实例在运行那么 get 方法会在当前窗口中加载新的 URL。
在加载完页面后WebDriver 将等待页面完全加载完成并且所有的资源如图像、CSS 文件、JavaScript 文件等都已经下载完毕。这确保了之后对页面元素的任何操作都不会出现意外的延迟或错误。
一旦页面加载完成WebDriver 就会返回一个包含加载完整的页面内容的 webdriver.chrome.webdriver 实例以便用户可以继续对页面进行操作比如查找元素、填写表单、点击按钮等等。
get 方法的参数是用于指定要导航到的目标网址的 URL。该参数的种类是字符串类型通常是一个标准的网址格式例如
- 完整的 URL例如https://www.example.com - 相对 URL例如/page - IP 地址例如http://192.168.1.1 - 本地文件路径例如file:///path/to/file.html
这些都是可以作为 get 方法的参数的合法格式。除此之外get 方法还可以接受其他类型的参数吗如下所示
- **None**如果传入 None则 WebDriver 将会加载当前页面的 URL。 - **空字符串**如果传入空字符串则 WebDriver 将会加载一个空白页面。 - **其他对象**如果传入的是非字符串类型的对象则会引发 TypeError 异常。 ----------
以下是 selenium.webdriver.support.select.Select 类中主要供外部使用的方法和属性 from selenium.webdriver.support.ui import Select # 创建一个 Select 对象select Select(driver.find_element(By.TAG_NAME, select)) 方法 1. deselect_all(): 清除所有选中的条目。只有当 SELECT 支持多选时才有效。 2. deselect_by_index(index: int): 取消选中给定索引处的选项。这是通过检查元素的“index”属性来完成的而不仅仅是通过计数。 3. deselect_by_value(value: str): 取消选中所有值与参数匹配的选项。 4. deselect_by_visible_text(text: str): 取消选中所有显示与参数匹配的文本的选项。 5. select_by_index(index: int): 选中给定索引处的选项。这是通过检查元素的“index”属性来完成的而不仅仅是通过计数。 6. select_by_value(value: str): 选中所有值与参数匹配的选项。 7. select_by_visible_text(text: str): 选中所有显示与参数匹配的文本的选项。 属性 1. all_selected_options: 返回属于此 select 标签的所有选中的选项的列表。 2. first_selected_option: 这个 select 标签中的第一个选中的选项或者在普通的 select 中当前选中的选项。 3. options: 返回属于此 select 标签的所有选项的列表。
--------------------------
在 selenium.webdriver.common.action_chains 模块中主要供外部使用的方法和属性包括
### 方法Methods 1. **move_to_element(element)**: 将鼠标移动到指定的元素上。 2. **click(on_elementNone)**: 在当前鼠标位置点击如果提供了参数 on_element则在指定元素上点击。 3. **click_and_hold(on_elementNone)**: 在当前鼠标位置点击并保持如果提供了参数 on_element则在指定元素上点击并保持。 4. **context_click(on_elementNone)**: 在当前鼠标位置右键点击如果提供了参数 on_element则在指定元素上右键点击。 5. **double_click(on_elementNone)**: 在当前鼠标位置双击如果提供了参数 on_element则在指定元素上双击。 6. **drag_and_drop(source, target)**: 拖拽源元素到目标元素。 7. **drag_and_drop_by_offset(source, xoffset, yoffset)**: 拖拽源元素到相对于当前位置的偏移位置。 8. **key_down(value, elementNone)**: 在指定元素上按下键盘按键如果未提供元素则按下键盘上的指定按键。 9. **key_up(value, elementNone)**: 在指定元素上释放键盘按键如果未提供元素则释放键盘上的指定按键。 10. **move_by_offset(xoffset, yoffset)**: 将鼠标相对于当前位置移动指定的偏移量。 11. **move_to_element_with_offset(to_element, xoffset, yoffset)**: 将鼠标移动到指定元素的偏移位置。 12. **pause(seconds)**: 在执行下一个操作之前暂停指定的秒数。 13. **perform()**: 执行所有积累的操作。
### 属性Properties 1. **actions**: 存储所有要执行的动作序列的列表。
这些方法和属性可以帮助用户构建复杂的交互操作序列并在浏览器中模拟用户行为。 ---------------------
selenium.webdriver.remote.switch_to 模块是 Selenium WebDriver 中的一个子模块用于实现在不同上下文之间切换的功能。在 WebDriver 中一个上下文context可以是一个浏览器窗口、一个浏览器标签页或者一个 HTML iframe 等。
这个模块中包含了一些类和方法用于在不同的上下文之间进行切换。主要的类和方法包括
- SwitchTo: 这是一个类包含了所有在不同上下文之间切换的方法。一般通过 WebDriver 实例的 switch_to 属性来获取该类的对象。- SwitchTo.active_element(): 返回当前活动的元素即当前焦点所在的元素。 - SwitchTo.default_content(): 从所有嵌套的 iframe 中切换回主文档。 - SwitchTo.frame(frame_reference): 切换到指定的 iframe可以传入 iframe 的索引、名称或者 WebElement 对象。 - SwitchTo.parent_frame(): 从当前 iframe 中切换到父级 iframe。- SwitchTo.window(window_name): 切换到指定名称的浏览器窗口。
通过使用这些方法可以在测试过程中灵活地在不同的上下文之间切换从而对页面中的不同元素进行操作或者在不同的浏览器窗口之间进行导航。
--------------
Keys 类从 selenium.webdriver.common.keys 模块导入。
Keys 类
Keys 类是一个枚举类它定义了一组表示键盘按键的常量。它提供了一种标准化和一致的方式来处理键盘输入无论底层操作系统或键盘布局如何。
可以使用点表示法访问 Keys 类中的常量。例如要访问表示 Shift 键的常量可以使用 Keys.SHIFT。
常用常量
以下是 Keys 类中一些最常用的常量
Keys.NULL空键不执行任何操作Keys.BACK_SPACE退格键Keys.TAB制表键Keys.ENTER回车键Keys.SHIFTShift 键Keys.CONTROLCtrl 键Keys.ALTAlt 键Keys.ESCAPEEsc 键Keys.PAGE_UPPage Up 键Keys.PAGE_DOWNPage Down 键Keys.ENDEnd 键Keys.HOMEHome 键Keys.LEFT左箭头键Keys.UP上箭头键Keys.RIGHT右箭头键Keys.DOWN下箭头键
用法
Keys 类常量通常与 ActionChains 类一起使用用于模拟键盘输入。例如以下代码将按住 Shift 键并输入大写字母 ABC
from selenium.webdriver.common.action_chains import ActionChains
from selenium.webdriver.common.keys import Keysactions ActionChains(driver)
actions.key_down(Keys.SHIFT)
actions.send_keys(ABC)
actions.key_up(Keys.SHIFT)
actions.perform()通过使用 Keys 类常量你可以确保你的自动化测试在不同的操作系统和键盘布局下都能可靠地执行。 -----------------------------------------
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as ECbrowser webdriver.Chrome()# 打开hao123网站
browser.get(https://www.hao123.com/)# 等待页面元素加载完成
wait WebDriverWait(browser, 10)
element wait.until(EC.presence_of_element_located((By.CLASS_NAME, hot-search)))# 获取元素的文本内容
element_text element.text
print(Element Text:, element_text)# 获取元素的标签名
tag_name browser.find_element(By.ID, search_logolink).tag_name
print(Tag Name:, tag_name)# 获取元素的大小
size browser.find_element(By.CLASS_NAME, searchWrapper).size
print(Element Size:, size)# 获取元素在页面中的位置
location browser.find_element(By.CLASS_NAME, header-hook).location
print(Element Location:, location)# 获取元素指定属性的值
attribute_value browser.find_element(By.ID, search_logolink).get_attribute(href)
print(Attribute Value:, attribute_value)# 返回元素是否可见
is_visible browser.find_element(By.CLASS_NAME, footer-hook).is_displayed()
print(Is Visible:, is_visible)# 获取父级元素
parent_element browser.find_element(By.CLASS_NAME, textInput).find_element(By.XPATH, ..)
print(Parent Element:, parent_element.get_attribute(outerHTML))# 获取元素的ID
element_id browser.find_element(By.CLASS_NAME, hot-search).id
print(Element ID:, element_id)# 获取元素的位置和大小信息
rect browser.find_element(By.CLASS_NAME, hot-search).rect
print(Element Rect:, rect)# 关闭浏览器
browser.quit()from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as ECdriver webdriver.Chrome()try:driver.get(https://www.hao123.com/)# print(*****driver_type,type(driver)) # driver_type class selenium.webdriver.chrome.webdriver.WebDriverinput_elements driver.find_elements(By.TAG_NAME, input)# print(*****input_elements,type(input_elements)) # *****input_elements class listfor input_element in input_elements:print(input_element.get_attribute(outerHTML))print(**35)lielements driver.find_element(By.CSS_SELECTOR,ul.boxhot li)for li in lielements:print(li.text)search_input driver.find_element(By.CSS_SELECTOR, input[data-hooksearchInput])# print(*****search_input_type,type(search_input)) # search_input_type class selenium.webdriver.remote.webelement.WebElementsearch_input.send_keys(Selenium库)search_button driver.find_element(By.CSS_SELECTOR, input[data-hooksearchSubmit])search_button.click()handles driver.window_handlesprint(type(handles))if len(handles) 1:driver.switch_to.window(handles[1])# Wait for the search results to load completelyWebDriverWait(driver, 10).until(EC.presence_of_element_located((By.CSS_SELECTOR, div[idcontent_left])))
finally:driver.quit()# In this updated version, we added the following imports:
# from selenium.webdriver.support.ui import WebDriverWait
# from selenium.webdriver.support import expected_conditions as EC
# We then added a WebDriverWait statement to wait for the presence of a specific element in the search results page:
# WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.CSS_SELECTOR, div[classsearch-list-item])))
# This statement waits for up to 10 seconds for an element with the CSS selector div[classsearch-list-item] to appear on the page.
# Once the element appears, the script continues to execute.# Note that you may need to adjust the CSS selector or the wait time to suit your specific needs.
# (By.CSS_SELECTOR, div[idcontent_left]) # selenium.webdriver.common.by.By 类的信息。这是 Selenium WebDriver 提供的一组支持的定位策略常量。
# 下面是这些常量的含义和用法
# By.CLASS_NAME: 根据元素的 class name 属性进行定位。
# By.CSS_SELECTOR: 根据 CSS 选择器进行定位。
# By.ID: 根据元素的 id 属性进行定位。
# By.LINK_TEXT: 根据链接文本进行定位适用于 a 标签。
# By.NAME: 根据元素的 name 属性进行定位。
# By.PARTIAL_LINK_TEXT: 根据链接文本的部分匹配进行定位。
# By.TAG_NAME: 根据元素的标签名进行定位。
# By.XPATH: 根据 XPath 表达式进行定位。
# 这些常量可用于 find_element() 和 find_elements() 方法的 locator 参数中以指定要使用的定位策略。