selenium 模块

目前学习到了selenium,看了一些介绍博客后,自己也动手实验了下,现做一些介绍,以后会利用此模块做写一个爬取动态页面的程序。


selenium常用的几个模块

from selenium import webdriver
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By

1.webdriver 主要是用于打开浏览器,在python目录下需要下载相应浏览器版本的webdriver,我常用的浏览器是chrome,所以下载的是Chromedriver。需要注意的是,webdriver的版本需要与浏览器版本相对应,我出现过的多种错误都是来自于webdriver版本问题。

webdriver主要用于 打开浏览器 与 定位元素

browser = webdriver.Chrome()
browser.get('https://www.taobao.com')
input = browser.find_element_by_id('q')
input.send_keys('watch')

第一行定义browser为chrome浏览器对象,第二行利用get方法打开淘宝网页,第三行是browser的定位方法find_element_by_id,这里定位的是淘宝首页的搜索框,最后在搜索框里输入“watch”。

browser的定位方法有很多,有通过id,class,css选择器,xpath等方法定位,这些定位方法在此篇博客里有详细介绍 https://www.cnblogs.com/qingchunjun/p/4208159.html

定位元素的id,class,css选择器,xpath等信息可以在网页的开发者模式里源码里寻找到,详细可参考这篇文章开头部分

http://blog.csdn.net/Qaz_wz/article/details/71038579?ref=myread

2.余下的三个模块通常联合使用。

WebDriverWait用来设置网页的 显式等待 方法,网页还有 强制等待 与隐式等待 两种方法,后两者无需该模块,三种等待方法在这篇文章里介绍得很详细:

http://blog.csdn.net/ping523/article/details/53419622

接下来我只详细介绍 显式等待 方法。通过一段代码来解释:

wait = WebDriverWait(browser, 10)
try:
    input = wait.until(
        EC.presence_of_element_located((By.CSS_SELECTOR, '#q'))
    )
    search = wait.until(
        EC.element_to_be_clickable((By.XPATH, '//*[@id="J_TSearchForm"]/div[1]/button'))
    )
    input.send_keys('手表')
    time.sleep(3)
    search.click()

finally:
    browser.quit()

第一行定义了一个等待对象,其构造函数参数如下

WebDriverWait(driver, 超时时长, 调用频率, 忽略异常)

第一个为web对象。第二个是超时时间,即最多等待设置的时间,如果超出这么长的时间,即抛出TimeoutException异常。

第三个为检查频率,默认为0.5,通常不设置。第四个即忽略出现的异常,通常也不设置。


等待对象常用的有两个方法即until与not until,含义即为等待某个元素出现(或是其他状态) 和 等待某个元素消失(或是其他状态)

如上述代码的的3~5行,即等待淘宝首页的搜索框出现,又如6~8行,即等待淘宝首页的搜索按钮可点击,该种方法的返回对象即使webelement,所以input即为搜索框,search即为搜索按钮。

接下来详细解释一下until内的参数:

until内不能传入Webelement对象,即这么写是错误的

input = wait.until(
    browser.find_element_by_css_selector('#q')  # 错误
)

传入的对象必须是有_call_方法的,通常是利用selenium模块里的expected_condition模块,一般 别名(as)为EC,EC里有多种方法,判断webelement是否存在、是否能点击等等。。。上述文章内有多各种方法的介绍,通常使用的就是 判断存在 与 按钮判断是否可点击,即代码里写的两种方法。

这些方法的的参数通常利用By模块来定位。方法的参数是一个 元组,(参数1,参数2)

参数1位定位的方法,是class还是id,还是xpath等;参数2 为确定的值.

如上述代码的第4行,利用CSS选择器来定位,值为‘#q’

如代码的第7行,利用Xpath来定位,值为 ‘//*[@id="J_TSearchForm"]/div[1]/button’


最后对不同的的Webelement有不同的方法,常用的输入文字,点击按钮等,常用的几种的方法在此篇文章里可查:

https://www.cnblogs.com/jinshengshun/p/6683290.html


若用较冷门的方法,在需要使用时再去其他地方查找




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值