Python学习_32
爬虫(三)webdriver
1、Selenium是ThroughtWorks公司开发的一套Web自动化测试工具。
它分为三个组件:
Selenium IDE
Selenium RC (Remote Control)
Selenium Webdriver
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在使用之前,不需要下载一个浏览器所对应用的驱动插件,请根据自己不同的浏览器版本,进行下载:
google连接下载地址:
百度网盘 请输入提取码 密码:qixa
下载完成后把chromdriver放在google安装目录
使用该插件代码:
import os
import time
from selenium import webdriver
from selenium.webdriver.common.keys
import Keys
chromedriver = r"C:\Users\Administrator\AppData\Local\Google\Chrome\Application\chromedriver.exe"
os.environ["webdriver.chrome.driver"] = chromedriver
driver = webdriver.Chrome(chromedriver)
driver.get("http://www.python.org
")
time.sleep(10)
driver.quit()
分析:执行代码之后,程序自动打开google浏览器,并输入
http://www.python.org,等待10秒后自动关闭浏览器
2、自动登录京东商城
#!/usr/bin/env python
# -*- coding: utf-8 -*-
# @Time : 2018\6\27 0027 0:36
# @Author : xiexiaolong
# @File : demon2.py
import
random
import
time
import
os
from
selenium
import
webdriver
###范围取值随机数的函数
def
randomSleep(minS, maxS):
time.sleep((maxS-minS)*random.random() + minS)
url =
'京东-欢迎登录'
chromedriver =
r"C:\Users\Administrator\AppData\Local\Google\Chrome\Application\chromedriver.exe"
os.environ[
"webdriver.chrome.driver"
] = chromedriver
driver = webdriver.Chrome(chromedriver)
driver.get(url)
randomSleep(
1
,
3
)
driver.find_elements_by_xpath(
'//a[@clstag="pageclick|keycount|login_pc_201804112|10"]'
)[
0
].click() ###查找“账户登录”标签
randomSleep(
1
,
2
)
driver.find_element_by_id(
'loginname'
).clear() ###清空输入框内容
randomSleep(
1
,
3
)
driver.find_element_by_id(
'loginname'
).send_keys(
"135xxxx3562"
) ##发送数据即在输入框写入账户
randomSleep(
1
,
2
)
driver.find_element_by_id(
'nloginpwd'
).send_keys(
"xxxx"
) ###发送数据,即在输入框写入密码
randomSleep(
3
,
5
)
driver.find_element_by_id(
'loginsubmit'
).click() ###点击按钮
randomSleep(
5
,
10
)
print
(driver.get_cookies()) ##获取cookie
driver.close()
3、八中选择器:
八种选择器:
1. find_elements_by_name(“test”)
页面:
<input type="text" name="passwd" id="passwd-id" class=”input-class”/>
代码:
element = driver.find_elements_by_name(“passwd”)
2. find_elements_by_id()
element = driver.find_element_by_id(“passwd-id”)
By.tagname()
element = driver.find_element_by_tagname(“input”)
3. find_element_by_class_name(‘input-class’)
4. find_elements_by_tag_name(‘iframe’)
DOM的Tag元素
用Tag name 定位元素的例子:
<iframe src="..."></iframe>
element = driver.find_elements_by_tag_name("iframe")
5. find_element_by_link_text()
页面:
代码:
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]
4、空间操作
element.clear() 清空输入框数据
element.sendkeys(“username”) 发送数据
element.text 获取文本的值
按钮:
element.click()
表单提交
element.submit()
单选和多选框
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
5、登录12306
#!/usr/bin/env python
# -*- coding: utf-8 -*-
# @Time : 2018\6\27 0027 0:55
# @Author : xiexiaolong
# @File : demon3.py
import
random
import
time
import
os
from
selenium
import
webdriver
url =
'中国铁路12306网站'
def
randomSleep(minS, maxS):
time.sleep((maxS-minS)*random.random() + minS)
time.sleep((maxS-minS)*random.random() + minS)
chromedriver =
r"C:\Users\Administrator\AppData\Local\Google\Chrome\Application\chromedriver.exe"
os.environ[
"webdriver.chrome.driver"
] = chromedriver
driver = webdriver.Chrome(chromedriver)
driver.get(
url
=url)
randomSleep(
2
,
5
)
driver.find_element_by_id(
"username"
).clear()
randomSleep(
1
,
3
)
randomSleep(
3
,
5
)
driver.find_element_by_id(
"password"
).send_keys(
"xxx"
)
randomSleep(
10
,
15
)
driver.find_element_by_id(
"loginSub"
).click()
randomSleep(
10
,
20
)
print
(driver.get_cookies())
driver.close()