爬虫webdriver教程汇总
前期准备工作下载python对版本没有特别要求,建议是3.5版本。安装的时候注意勾选下方的Add Python 3.x to PATH安装对应浏览器的webdriver三种webdriver下载地址chromedriver 下载地址:https://code.google.com/p/chromedriver/downloads/listFirefox的驱动geckodriver 下载地址:htt
·
前期准备工作
下载python
对版本没有特别要求,建议是3.7以上版本。安装的时候注意勾选下方的Add Python 3.x to PATH
安装对应浏览器的webdriver
三种webdriver下载地址
- chromedriver 下载地址:https://code.google.com/p/chromedriver/downloads/list
- chromedriver国内镜像:http://npm.taobao.org/mirrors/chromedriver/
- Firefox的驱动geckodriver 下载地址:https://github.com/mozilla/geckodriver/releases/
- IE的驱动IEdriver 下载地址:http://www.nuget.org/packages/Selenium.WebDriver.IEDriver
注意:Chrome版本和chromedriver版本要匹配
配置环境
有两种方式:
- 第一种:百度搜索如何将文件配置到环境变量中(不推荐)
- 第二种:找到python的IDLE,右键选择打开文件所在目录,将下载好的driver粘贴到该目录下即可
浏览器对应的类名
我们通过查看webdriver的源码可以看到所支持的类型,不仅仅局限于我们提到的三种,包括Edge等等,我们推荐使用谷歌或者火狐。
火狐浏览器对应的类名是Firefox(),谷歌浏览器对应的类名是Chrome()
webdriver模板
from selenium import webdriver
from lxml import etree
# 创建webdriver
browser = webdriver.Chrome() # 创建谷歌浏览器的webdriver,写成webdriver.Firefox()表示创建火狐浏览器的webdriver
url = "https://www.baidu.com"
# 开始请求
driver.get(url)
#得到页面源代码
response=driver.page_source #字符串形式
html=etree.HTML(response)
#提取信息
title=html.xpath['']
#关闭浏览器
browser.quit()
#关闭chreomedriver进程
browser.close()
PhantomJS无头浏览器的使用
PhantomJS是一个不会显示界面的浏览器,已经停止更新,selenium也不推荐使用它,而是使用我们常用浏览器的无头模式
from selenium import webdriver
url = 'https://www.baidu.com/'
driver = webdriver.PhantomJS(executable_path=r"你的PhantomJS地址,配置到环境变量中可以不写")
driver.get(url)
启用浏览器无头模式
from selenium import webdriver
chrome_options=webdriver.ChromeOptions()
chrome_options.add_argument('--headless')#设置无页面模式
driver = webdriver.Chrome(options=chrome_options) # 这样就好了
便携版Chrome的使用
有人不想在电脑里安装Chrome,我们可以下载便携版的Chrome,然后在创建driver的时候指定浏览器exe文件的地址即可。
注:便携版Chrome也要和driver配套嗷
chrome_options参数介绍
from selenium import webdriver
chrome_options=webdriver.ChromeOptions()
chrome_options.add_argument('--praxy-srever=http://171.12.313.34:9999')#设置代理ip
chrome_options.add_argument('--user-agent=')#设置user-agent,可以设置成手机端的
chrome_options.add_argument('--headless')#设置无页面模式
driver = webdriver.Chrome(options=chrome_options)
# 开始请求
url = "https://www.baidu.com"
driver .get(url)
#打印页面源代码
print(browser.page_source)
#关闭浏览器
driver .quit()
#关闭chreomedriver进程
页面三种等待方式
- 强制等待。使用time.sleep()
- 隐式等待。程序会一直等待整个页面加载完成才会执行下一步
- 显示等待。设置最长等待时间,规定时间内等到了就不再继续等,超时会报错
import time
from selenium import webdriver
driver = webdriver.Chrome()
# 强制等待
def wait1():
time.sleep(5)
#隐式等待
def wait2():
#设置隐式等待,隐性等待对整个driver的周期都起作用,所以只要设置一次即可。放在get上面
#有一个弊端:程序会一直等待整个页面加载完成,即你看到浏览器标签栏那个小圈不再转,才会执行下一步
driver.implicitly_wait(10)
driver.get('www.baidu.som')
# 显式等待,只要出现想要的那个元素就停止等待
def wait3():
#显示等待。第3秒就找到了这个元素,那么也就不会多等剩下的7秒使时间,而是继续执行后续代码。
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
try:
element = WebDriverWait(driver, 10,0.5).until(
EC.presence_of_element_located((By.ID, "myDynamicElement"))
)
#10代表如果10秒还不出来就算超时,0.5代表检查间隔时间(步长),默认为0.5
finally:
driver.quit()
'''
一些其他的等待条件:
presence_of_element_located:某个元素已经加载完毕了。
presence_of_all_emement_located:网页中所有满足条件的元素都加载完毕了。
element_to_be_cliable:某个元素是可以点击了
'''
常用操作
模拟滑动
#模拟向下滑动,记得做循环
driver.execute_script("window.scrollTo(0,document.body.scrollHeight)")#先下滑到底 0代表坐标
driver.execute_script("window.scrollTo(1000,document.body.scrollHeight)")#再上滑一下 1000代表坐标
'''
window.scrollBy(0,500) 向下滚动500个像素
window.scrollBy(0,-500) 向上滚动500个像素
window.scrollBy(500,0) 向右滚动500个像素
window.scrollBy(-500,0) 向左滚动500个像素
'''
选中元素
from selenium import webdriver
from selenium.webdriver.common.by import By
#输入查询的字,可以根据id、class_name、name、tag_name、xpath、css选择器来选择,具体看你想弄的地方有什么可选的
# 旧版写法
# inputTag = driver.find_element_by_class_name('tt-input__inner')
# 新版写法
inputTag = driver.find_element(By.CLASS_NAME, 'tt-input__inner')
填入文本
#输入查询的字,可以根据id、class_name、name、tag_name、xpath、css选择器来选择,具体看你想弄的地方有什么可选的
inputTag = driver.find_element_by_class_name('tt-input__inner')
inputTag.send_keys('银行') # 填入文本
点击选中的元素
inputTag = driver.find_element_by_xpath('tt-input-group__append')
inputTag.click()
页面截图
#页面截图
driver.save_screenshot('到此一游.png')
切换浏览器页面
#切换浏览器页面。因为虽然显示带开了新页面,但url信息并不会转移到新页面
windows=driver.window_handles#得到当前所有窗口
driver.switch_to.window(windows[1])#根据索引进行选择
访问frame标签
#访问frame标签。即html中嵌套了新的html,例如QQ空间
login_frame=driver.find_element_by_id('login_frame')#定位到framde的位置
driver.switch_to.frame(login_frame)#切换至frame中,然后就能对frame里面的东西进行操作了
获取cookie
#获取cookie
print(driver.get_cookies())#得到列表,不仅包含name,value还包含其他信息
cookie_dict={cookie['name']:cookie['value'] for cookie in driver.get_cookies()}#通常这样配合requests库使用cokie信息
屏蔽浏览器的selenium标记
from selenium import webdriver
driver = webdriver.Chrome()
url = 'https://www.wjx.cn/vm/exA8tke.aspx'
driver.execute_cdp_cmd('Page.addScriptToEvaluateOnNewDocument', {
'source': 'Object.defineProperty(navigator, "webdriver", {get: () => undefined})'
})
driver.get(url)
注意:新版selenium获取元素方式为
driver.find_element(By.ID, 'divNext')
更多推荐
所有评论(0)