55. Python 爬虫(4),,webdriverS


webdriver

Selenium是ThroughtWorks公司开发的一套Web自动化测试工具。

它分为三个组件:

SeleniumIDESeleniumRC(RemoteControl)SeleniumWebdriver

Selenium IDE:是firefox的一个插件,允许测试人员录制脚本并回放。

Selenium RC和Selenium Webdriver:是测试框架,提供多种语言的API。


不同的是,Selenium Webdriver以一种更底层、更灵活的方式来操作浏览器,并不仅仅使用JavaScript。这样它可以绕开浏览器的沙箱限制,实现Selenium RC不支持的框架、弹出窗口、页面导航、下拉菜单、基于AJAX的UI元素等控件的操作。而且,Selenium Webdriver不需要本地服务器。


Selenium 1.x版本只包含前两个组件。从2.0开始Webdriver加入其中。

主要是来解决https的加密问题


Webdriver在使用之前,需要下载一个浏览器所对应用的驱动插件,请根据自己不同的浏览器版本,进行下载:

百度搜:

技术分享图片


进入网站:

http://npm.taobao.org/mirrors/chromedriver/

技术分享图片


下载以后,并把chromdriver放在chrome的google.exe的目录下面

技术分享图片


先安装selenium

#pipinstallselenium


自动打开chrome,并打开域名相关的网页

importosimporttimefromseleniumimportwebdriverfromselenium.webdriver.common.keysimportKeyschromedriver="C:\ProgramFiles(x86)\Google\Chrome\Application\chromedriver.exe"os.environ["webdriver.chrome.driver"]=chromedriverdriver=webdriver.Chrome(chromedriver)driver.get("http://www.python.org")time.sleep(100)driver.quit()


执行:自动打开网页

技术分享图片


搜索栏(Search)的代码如下:

技术分享图片

id="id-search-field" 是 Search 的唯一标识符。


技术分享图片

id="submit" 是按钮“GO”的唯一标识符。


让页面自动搜索关键字,代码如下:

importosimporttimefromseleniumimportwebdriverfromselenium.webdriver.common.keysimportKeyschromedriver="C:\ProgramFiles(x86)\Google\Chrome\Application\chromedriver.exe"os.environ["webdriver.chrome.driver"]=chromedriverdriver=webdriver.Chrome(chromedriver)driver.get("http://www.python.org")element=driver.find_element_by_id("id-search-field")element.clear()element.send_keys("os")elementsubmit=driver.find_element_by_id("submit")elementsubmit.click()time.sleep(10000)driver.quit()


结果如图:

技术分享图片


学习几种选择器:

1. find_elements_by_name(“test”) # 根据name定位

页面:

<input type="text" name="passwd" id="passwd-id" class=”input-class”/>

代码:

element = driver.find_elements_by_name(“passwd”)


2. find_elements_by_id()#根据ID定位,定位最准确

element = driver.find_element_by_id(“passwd-id”)

By.tagname()

element = driver.find_element_by_tag_name(“input”)


3. find_element_by_class_name(‘input-class’) #根绝class定位


4. find_elements_by_tag_name(‘iframe’)#根据元素定位

这里以iframe举例:用Tag name 定位元素

例子:

检查页面获得如下:

<iframe src="... ..."> xxxxxxx </iframe>

element = driver.find_elements_by_tag_name("iframe")

【iframe 就是定位行的元素】


5. find_element_by_link_text()#通过链接文字定位

页面:

<a href="http://www.google.com/search?q=baidu">baidu</a>

代码:

element = browser.find_elements_by_link_text("baidu")


6. xpath

这个特别强大,所有的元素都可以通过这个可以找到。

XPath是XML Path的简称,由于HTML文档本身就是一个标准的XML页面,所以我们可以使用XPath的语法来定位页面元素。

绝对路径:根元素开始,及html开始用/相对路劲:任意符合条件的元素//查找页面上所有的input元素://input查找页面上第一个form元素内的直接子input元素(即只包括form元素的下一级input元素,使用绝对路径表示,单/号)://form[1]/input查找页面上第一个form元素内的所有子input元素(只要在form元素内的input都算,不管还嵌套了多少个其他标签,使用相对路径表示,双//号)://form[1]//input查找页面上第一个form元素://form[1]查找页面上id为loginForm的form元素://form[@id='loginForm']查找页面上具有name属性为username的input元素://input[@name='username']查找页面上id为loginForm的form元素下的第一个input元素://form[@id='loginForm']/input[1]查找页面具有name属性为contiune并且type属性为button的input元素://input[@name='continue'][@type='button']查找页面上id为loginForm的form元素下第4个input元素://form[@id='loginForm']/input[4]


控件操作:

输入框;

element.clear() #清空输入框数据

element.sendkeys(“username”) #发送数据

element.text #获取元素文本的值



按钮:

element.click() #"点击"操作

element.submit()#同.click(),操作相同,常用 .click()



单选和多选框

element.clear()

element = browser.find_elements_by_id(' checkbox') #也可能是其他,根据具体情况,选择关键字元素即可。

##选择某个单选项:

element.click();


常用方法:

browser.get_cookies()

browser.title #头名字

browser.close()


.forward() #前进

举例:

browser.foeward()


.back() #后退

举例:

browser.back()


.refresh()#刷新

举例:

browser.refresh()


.current_url#返回当前页面url

举例:

browser.current_url


实例1:登录12306

fromseleniumimportwebdriverimportrandomimporttimedefrandomSleep(minS,maxS):time.sleep((maxS-minS)*random.random()+minS)browser=webdriver.Chrome(r"C:\ProgramFiles(x86)\Google\Chrome\Application\chromedriver.exe")url="https://kyfw.12306.cn/otn/login/init"browser.get(url=url)print(browser.find_element_by_id("username").text)browser.find_element_by_id("username").clear()browser.find_element_by_id("username").send_keys("xxxxxxxxxx")randomSleep(2,5)browser.find_element_by_id("password").send_keys("xxxxxxxxx")randomSleep(1,4)time.sleep(6)browser.find_element_by_id("loginSub").click()randomSleep(2,5)print(browser.get_cookies())browser.quit()

#除验证码要手动确认外,其他全自动完成。



实例2:登录京东(重点在xpath选择器的用法)

fromseleniumimportwebdriverimportrandomimporttimedefrandomSleep(minS,maxS):time.sleep((maxS-minS)*random.random()+minS)browser=webdriver.Chrome(r"C:\ProgramFiles(x86)\Google\Chrome\Application\chromedriver.exe")#Homebrowser.get("https://passport.jd.com/new/login.aspx")#LoginbyusernameandpasswordrandomSleep(1,2)browser.find_element_by_xpath("//a[@clstag='pageclick|keycount|201607144|2']").click()#UsernameandpasswordrandomSleep(1,2)browser.find_element_by_id("loginname").send_keys("xxxxxxxx")#用户print(browser.find_element_by_id("loginname").text)randomSleep(1,3)browser.find_element_by_id("nloginpwd").send_keys("xxxxxxx")#密码#Submit,waitforalongtimerandomSleep(5,10)browser.find_element_by_id("loginsubmit").click()print(browser.get_cookies())randomSleep(3,5)browser.quit()


55. Python 爬虫(4)

评论关闭