Python的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.webdriver`:Chrome 浏览器的 WebDriver 实现

  5. `selenium.webdriver.chromium.options`:用于配置 Chromium 浏览器的选项。

  6. `selenium.webdriver.chromium.remote_connection`:与远程 Chromium 浏览器进行连接的类。

  7. `selenium.webdriver.chromium.service`:用于管理 Chromium 浏览器的后台服务。

  8. `selenium.webdriver.chromium.webdriver`:Chromium 浏览器的 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.options`:WebDriver 的选项设置。

  15. `selenium.webdriver.common.print_page_options`:打印页面时的选项设置。

  16. `selenium.webdriver.common.proxy`:用于配置代理服务器的选项。

  17. `selenium.webdriver.common.service`:WebDriver 的服务设置。

  18. `selenium.webdriver.common.timeouts`:WebDriver 的超时设置。

  19. `selenium.webdriver.common.utils`:WebDriver 的实用工具函数。

  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.webdriver`:Edge 浏览器的 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_frequency=0.5, ignored_exceptions=None)`: 构造函数,接受一个 WebDriver 实例和超时时间(以秒为单位)作为参数。`driver` 参数是 WebDriver 的实例(如 Ie,Firefox,Chrome 或 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())

  1. `**until(method, message='')`:**调用提供的方法,该方法将驱动程序作为参数,直到返回值不为 False。参数 `method` 是一个可调用的 WebDriver,`message` 是可选的 TimeoutException 消息。如果超时,将引发 `selenium.common.exceptions.TimeoutException` 异常。

  2. `until_not(method, message='')`: 调用提供的方法,该方法将驱动程序作为参数,直到返回值为 False。参数 `method` 是一个可调用的 WebDriver,`message` 是可选的 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(by='id', value=None)`: 根据给定的定位策略和定位器找到元素。

  4. `find_elements(by='id', value=None)`: 根据给定的定位策略和定位器找到一组元素。

  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。

  6. `find_element(by='id', value)`: 根据给定的定位策略和定位器找到元素。

  7. `find_elements(by='id', value)`: 根据给定的定位策略和定位器找到一组元素。

  8. `forward()`: 在浏览器历史中前进一步。
    10. `get(url)`: 在当前浏览器会话中加载网页。

  9. `get_cookie(name)`: 通过名称获取单个 cookie。

  10. `get_cookies()`: 返回当前会话中可见的一组 cookies。

  11. `get_screenshot_as_base64()`: 以 base64 编码字符串的形式获取当前窗口的截图。

  12. `get_screenshot_as_file(filename)`: 将当前窗口的截图保存为 PNG 图像文件。

  13. `get_screenshot_as_png()`: 以二进制数据的形式获取当前窗口的截图。

  14. `get_window_position(windowHandle='current')`: 获取当前窗口的 x, y 位置。

  15. `get_window_rect()`: 获取当前窗口的 x, y 坐标以及高度和宽度。

  16. `get_window_size(windowHandle='current')`: 获取当前窗口的宽度和高度。

  17. `implicitly_wait(time_to_wait)`: 设置隐式等待时间。

  18. `maximize_window()`: 最大化当前 webdriver 使用的窗口。

  19. `refresh()`: 刷新当前页面。

  20. `save_screenshot(filename)`: 将当前窗口的截图保存为 PNG 图像文件。

  21. `set_window_position(x, y, windowHandle='current')`: 设置当前窗口的 x, y 位置。

  22. `set_window_rect(x=None, y=None, width=None, height=None)`: 设置当前窗口的 x, y 坐标以及高度和宽度。

  23. `set_window_size(width, height, windowHandle='current')`: 设置当前窗口的宽度和高度。

  24. `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。该参数的种类是字符串类型,通常是一个标准的网址格式,例如:

这些都是可以作为 `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_element=None)**: 在当前鼠标位置点击(如果提供了参数 `on_element`,则在指定元素上点击)。

  3. **click_and_hold(on_element=None)**: 在当前鼠标位置点击并保持(如果提供了参数 `on_element`,则在指定元素上点击并保持)。

  4. **context_click(on_element=None)**: 在当前鼠标位置右键点击(如果提供了参数 `on_element`,则在指定元素上右键点击)。

  5. **double_click(on_element=None)**: 在当前鼠标位置双击(如果提供了参数 `on_element`,则在指定元素上双击)。

  6. **drag_and_drop(source, target)**: 拖拽源元素到目标元素。

  7. **drag_and_drop_by_offset(source, xoffset, yoffset)**: 拖拽源元素到相对于当前位置的偏移位置。

  8. **key_down(value, element=None)**: 在指定元素上按下键盘按键(如果未提供元素,则按下键盘上的指定按键)。

  9. **key_up(value, element=None)**: 在指定元素上释放键盘按键(如果未提供元素,则释放键盘上的指定按键)。

  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.SHIFT:Shift 键
  • Keys.CONTROL:Ctrl 键
  • Keys.ALT:Alt 键
  • Keys.ESCAPE:Esc 键
  • Keys.PAGE_UP:Page Up 键
  • Keys.PAGE_DOWN:Page Down 键
  • Keys.END:End 键
  • Keys.HOME:Home 键
  • 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 Keys

actions = ActionChains(driver)
actions.key_down(Keys.SHIFT)
actions.send_keys("ABC")
actions.key_up(Keys.SHIFT)
actions.perform()

通过使用 Keys 类常量,你可以确保你的自动化测试在不同的操作系统和键盘布局下都能可靠地执行。


python 复制代码
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 EC

browser = 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()
python 复制代码
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 EC

driver = webdriver.Chrome()

try:
    driver.get("https://www.hao123.com/")
    # print('*****driver_type',type(driver)) # driver_type <class 'selenium.webdriver.chrome.webdriver.WebDriver'>
    input_elements = driver.find_elements(By.TAG_NAME, "input")
    # print('*****input_elements',type(input_elements)) # *****input_elements <class 'list'>
    for 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-hook="searchInput"]')
    # print('*****search_input_type',type(search_input)) # search_input_type <class 'selenium.webdriver.remote.webelement.WebElement'>
    search_input.send_keys("Selenium库")
    search_button = driver.find_element(By.CSS_SELECTOR, 'input[data-hook="searchSubmit"]')
    search_button.click()
    handles = driver.window_handles
    print(type(handles))
    if len(handles) > 1:
        driver.switch_to.window(handles[1])
    # Wait for the search results to load completely
    WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.CSS_SELECTOR, 'div[id="content_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[class="search-list-item"]')))
# This statement waits for up to 10 seconds for an element with the CSS selector 'div[class="search-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[id="content_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 参数中,以指定要使用的定位策略。
相关推荐
神仙别闹6 分钟前
基于C#和Sql Server 2008实现的(WinForm)订单生成系统
开发语言·c#
XINGTECODE8 分钟前
海盗王集成网关和商城服务端功能golang版
开发语言·后端·golang
zwjapple24 分钟前
typescript里面正则的使用
开发语言·javascript·正则表达式
小五Five25 分钟前
TypeScript项目中Axios的封装
开发语言·前端·javascript
前端每日三省27 分钟前
面试题-TS(八):什么是装饰器(decorators)?如何在 TypeScript 中使用它们?
开发语言·前端·javascript
好看资源平台37 分钟前
网络爬虫——综合实战项目:多平台房源信息采集与分析系统
爬虫·python
凡人的AI工具箱40 分钟前
15分钟学 Go 第 60 天 :综合项目展示 - 构建微服务电商平台(完整示例25000字)
开发语言·后端·微服务·架构·golang
chnming19871 小时前
STL关联式容器之map
开发语言·c++
进击的六角龙1 小时前
深入浅出:使用Python调用API实现智能天气预报
开发语言·python
檀越剑指大厂1 小时前
【Python系列】浅析 Python 中的字典更新与应用场景
开发语言·python