1. 插件安装
http://chromedriver.storage.googleapis.com/index.html
下载 Google webdriver 并将 webdriver 安装路径 放到python安装目录下 根据浏览器的版本下载,推荐使用谷歌浏览器
下载selenium pip install selenium
2.使用时机
一般在模拟登录时遇到滑块验证码,以及部分请求库(requests)不好爬取的网站
3.基本使用方法
from selenium import webdriver
browser = webdriver.Chrome() #使用谷歌浏览器的方法,对其实例化
browser.maximize_window() # 将浏览器最大化显示
browser.minimize_window() # 将浏览器最大化显示
browser.set_window_size(600,800) # 设置浏览器宽600 高800
browser.get("https://www.baidu.com/")
browser.get("https://www.douban.com/")
browser.back() # 后退
browser.forward() # 前进
browser.quit() # 关闭
4.元素定位方法
通过id find_element_by_id()
通过class find_element_class_name()
通过name find_element_by_name()
通过css find_element_by_css_selector()
通过id find_element_by_xpath()
前四种括号内语法与css语法相同
5.selenium动作
from selenium import webdriver
from selenium.webdriver import ActionChains
browser = webdriver.Chrome()
browser.get("") #获取网站
#browser.switch_to_frame("") #有内联框架时先获取内联框架
div = browser.find_element_by_id("")
action = ActionChains(browser)
action.click_and_hold(div) # 长按指定标签
for i in range(15):
action.move_by_offset(18, 0) # 没动 perform执行
# action.move_by_offset(250,0)
action.release().perform()
6.selenium等待
第一种也是最简单粗暴的一种办法就是强制等待sleep(xx),需要引入“time”模块,这种叫强制等待,不管你浏览器是否加载完了,程序都得等待3秒,3秒一到, 继续执行下面的代码,作为调试很有用,有时候也可以在代码里这样等待,不过不建议总用这种等待方式,太死板,严重影响程序执行速度。
第二种办法叫隐性等待,通过添加 implicitly_wait() 方法就可以方便的实现智能等待;implicitly_wait(30) 的用法应该比 time.sleep() 更智能, 后者只能选择一个固定的时间的等待,前者可以 在一个时间范围内智能的等待。 如果在规定时间内网页加载完成,则执行下一步,否则一直等到时间截止,然后执行下一步。
第三种办法就是显性等待,WebDriverWait,配合该类的until()和until_not()方法,就能够根据判断条件而进行灵活地等待了。 它主要的意思就是:程序每隔xx秒看一眼,如果条件成立了,则执行下一步,否则继续等待,直到超过设置的最长时间,然后抛出TimeoutException。
from selenium import webdriver
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.support.wait import WebDriverWait
driver = webdriver.Chrome()
driver.get("https://www.baidu.com/")
WebDriverWait(driver, 10).until(EC.title_is("百度一下,你就知道"))
'''判断title,返回布尔值'''
WebDriverWait(driver, 10).until(EC.title_contains(u"百度一下")) # 包含 u可加可不加