要进行各种导航第一件做的事情就是打开浏览器窗口。最简单的方式就是通过 get 方法打开。
在 driver.get('http://www.baidu.com')过程中,WebDriver 持续保持控制权在页面被完全加载前。
但是如果页面中有很多 AJAX 在同时加载,WebDriver 根本无法感知其是否加载完毕,这个时候就需要用到 waits 方法,具体在 selenium 之等待元素 详细讲述。
与页面的交互
一、获取元素
WebDriver 提供了许多方式来寻找元素,实现与页面的交互。
详细的说,共有以下几种方法:(都是以 find_element_by_ 开头)
- find_element_by_id
- find_element_by_name
- find_element_by_xpath
- find_element_by_link_text
- find_element_by_partial_lind_text
- find_element_by_tag_name
- find_element_by_class_name
- find_element_by_css_selector
这些方法返回的都是第一个匹配到的元素,如果想返回所有匹配的结果
find_element_by_* 改成 find_elements_by_*
上面的方法同时可以通过以下形式表现:
find_element 和 find_elements
具体使用方法
from selenium.webdriver.common.by import By
driver.find_element(By.XPATH, '//*[@id='login']/div/p/li[1]')
以下是 By 类对应的所有查找方式:
ID , XPATH, LINK_TEXT, PARTIAL_LINK_TEXT,NAME,TAG_NAME,CLASS_NAME,CSS_SELECTOR
两种方式对比,只是使用方式不同
第一种方式 | 第二种方式 |
---|---|
*_by_id | By.ID |
*_by_xpath | By.XPATH |
*_by_link_text | By.LINK_TEXT |
... | ... |
此时会有同学问,这几个查找元素的方法有什么不同吗?什么场景下使用那种方式更方便?答案是有,而且不同方法区别还挺大,具体的方式在另一篇文章中详细讲述。
二、操作元素
获取元素后,怎么操作呢?
比如说我们想输入文本到文本框中,然后再模拟键盘上回车键:
element.clear()
element.send_keys(' and some')
element.send_keys(' and some', Keys.RETURN)
理论上,我们可以对任何一个元素调用 send_keys,这就允许 Selenium 模拟在浏览器中使用快捷键
三、填充表单
如果表单是单选框,我们可以通过 element.click() 方式直接点击,但是如果表单是多个选项,这个时候,再一个个遍历出来元素,模拟点击操作,就会显得很呆瓜。
WebDriver 提供了 Select 的方法来跟表单进行交互。