python爬虫(十三)——selenium(二)(未完善)

Posted by

①如果我们输入的内容包含特殊的按键,比如回车、空格等,或者我们想要输入组合按键,我们就需要使用Keys模块:

from selenium.webdriver.common.keys import Key

如果我们想要输入空格:

a = driver.find_element_by_Tag_name('input')
a.send_keys(Keys.SPACE)

如果我们想要同时输入Ctrl+a:

a = driver.find_element_by_Tag_name('input')
a.send_keys(Keys.CTRL,'a')

常见按键:

回车Keys.ENTER
空格Keys.SPACE
制表Keys.TAB
删除Keys.BACK_SPACE
ESCKeys.ESCAPE
CtrlKeys.CONTROL
ShiftKeys.SHIFT
F1(其余依此类推)Keys.F1

②等待:

selenium有显式等待和隐式等待,隐式等待就是强制等待,等待完成后继续执行,而显式等待则显得更加灵活,如果在等待时间内,我们需要的目标加载出现了,或者我们不需要的目标消失了,selenium就不会继续等待,会开始执行之后的内容,而如果条件一直不满足,selenium则会在到达最大等待时间后不再等待,开始执行后面的内容。

1>

隐式等待:

需要使用到implicitly_wait()方法:

from selenium import webdriver
driver = webdriver.Chrome()
driver.implicitly_wait(10)

implicitly_wait()括号中填入需要等待的时间,单位是秒

同样,这种方法也能通过time.sleep()实现

2>

显式等待:

显式等待需要引入两个模块:

from selenium.webdriver.support import expected_conditions

from selenium.webdriver.support.wait import WebDriverWait

其中,如果觉得expected_conditions过长,我们可以采取别名的方式:

from selenium.webdriver.support import expected_conditions as EC

这样,我们以后可以用EC来代替expected_conditions了

显式等待我们需要使用到WebDriverWait(),正常情况下我们可以传入三个参数:
Ⅰ.driver:

传入WebDriver实例

Ⅱ.timeout:

超时时间,等待的最长时间

Ⅲ.poll_frequency:

调用until或者until_not中的方法的间隔时间,默认是0.5秒

显式等待有两种等待方式:

until和until_not

until(method,message)
until_not(method,message)

Ⅰ.method:
在等待期间,每隔一段时间调用这个传入的方法,until是当某元素出现或者什么条件成立时继续执行,until_not是当某元素消失或者什么条件不成立时继续执行

Ⅱ.message:

如果超时,抛出TimeoutException,将message传入异常

这里的method参数我们使用expected_conditions来进行封装

expected_conditions提供的条件有:

1>验证url:

传入url,包含时返回Trueurl_contains()
传入正则表达式url_matches()
传入url,完全匹配时返回Trueurl_to_be()
传入url,不匹配时返回Trueurl_changes()
验证url

2>验证元素是否出现:

传入元组类型locatorpresence_of_element_located()
传入元组类型的locator,要求全部出现presence_of_all_elements_located()
验证元素是否出现

3>判断某文本是否出现在某元素中

判断元素的texttext_to_be_present_in_element()
判断元素的valuetext_to_be_present_in_element_value()
判断元素的attributetext_to_be_present_in_element_attribute()
判断文本是否出现

4>判断元素是否可见并且可被点击

判断元素是可见并能被点击的element_to_be_clickable
判断元素是可见并能被点击的

5>验证元素是否可见

传入WebElement验证可见visibility_of_element
传入元组类型的locator,验证可见visibility_of_element_located
传入元组类型的locator,验证可见(只要有一个可见就可以)visibility_of_any_element_located
传入元组类型的locator,验证可见(所有都可见才可以)visibility_of_all_element_located
传入WebElement或locator,验证不可见invisibility_of_element
传入元组类型的locator,验证不可见invisibility_of_element_located
验证元素是否可见

6>判断是否打开新窗口,并且窗口句柄数量会增加

new_window_is_opened

7>判断窗口数量,传入期望的窗口数量

number_of_windows_to_be

8>判断是否有alert出现

alert_is_present

9>判断元素是否被选中

传入WebElement对象element_to_be_selected
传入元组类型的locatorelement_located_to_be_selected
传入WebElement对象及状态,相等返回True,否则Falseelement_selection_state_to_be
传入locator及状态,相等返回True,否则Falseelement_located_selection_state_to_be
判断元素是否被选中

10>等某个节点从DOM数中移除,如果该元素仍然存在返回False,否则返回True,常用于判断页面是否已经刷新

staleness_of