安装selenium:
pip install selenium
安装Chrome Driver:
http://chromedriver.storage.googleapis.com/index.html
chrome://version
查看版本)chromedriver.exe
添加到用户环境变量from selenium import webdriver
import time
# 0.创建浏览器对象
browser = webdriver.Chrome()
# 1.访问页面
browser.get('http://www.baidu.com')
print(browser.title) # 百度一下,你就知道
# print(type(browser.find_element_by_class_name("s-top-left"))) #
# 2.定位网页元素,可使用( Selenium自带API || 通过browser.page_source获取网页源码再结合BeautifulSoup等解析工具定位元素)
browser.find_element_by_link_text("新闻").click() # 模拟鼠标点击文本为“新闻”的链接
print(browser.current_url) # https://www.baidu.com/
print(browser.page_source) # 获取网页源码
time.sleep(5)
browser.quit() # 浏览器关闭
效果:打开Chrome
,点击新闻
,等待5s
,浏览器关闭
from selenium import webdriver
import time
browser = webdriver.Chrome()
browser.get('http://douban.com')
time.sleep(1)
search_box = browser.find_element_by_name('q') # 搜索框
search_box.send_keys('Python')
bt1 = browser.find_element_by_class_name('bn') #提交按钮
bt1.click()
time.sleep(5)
browser.quit()
主要有两种方式:
PageDown
)from selenium import webdriver
from selenium.webdriver import ActionChains
from selenium.webdriver.common.keys import Keys
import time
browser = webdriver.Chrome()
browser.get('http://news.baidu.com/')
for i in range(20):
# 模拟键盘输入方式向下滚动,perform()执行ActionChains存储的所有动作
# 链式模型:ActionChains(browser).send_keys(x).click(y).move_to_element(z).perform()
# 相当于执行三个动作( t = ActionChains(browser) , t.send_keys(x) , t.click(y)
# t.move_to_element(z) , t.perform()
ActionChains(browser).send_keys(Keys.PAGE_DOWN).perform()
time.sleep(0.5)
browser.quit()
JavaScript
代码from selenium import webdriver
import time
browser = webdriver.Chrome()
browser.get('http://news.baidu.com/')
for i in range(10):
# scrollTo(x,y)方法:将内容滚动到指定坐标
browser.execute_script("window.scrollTo(0,document.body.scrollHeight)") # 滚动到页面底部
time.sleep(0.5)
使用Selenium时也要注意等待机制
,以保证浏览器被驱动时能够有寻找元素的缓冲时间。
分为隐式等待
,显式等待
implicitly_wait(x)
调用(不灵活、写法简单browser = webdriver.Chrome()
browser.implicitly_wait(x) # 若下面的find_element_by_id()未能立即获得结果,则保持轮询并等待x秒
browser.get('a url')
browser.find_element_by_id('id_name')
WebDriverWait
和 Expected Condition
使用:(等待某一条件发生,较灵活from selenium import webdriver
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.common.by import By
browser = webdriver.Chrome()
browser.get('a url')
WebDriverWait(browser,10,0.5).until(EC.presence_of_element_located((By.LINK_TEXT, 'text'))).click()
其中,
WebDriverWait(driver=browser, timeout=10, poll_frequency=0.5, ignored_exceptions=None)
:
driver
:浏览器驱动timeout
:最长超时时间,单位(秒)poll_frequency
:轮询检测时间,也就是每隔多少时间检测一次,默认是0.5秒ignored_exceptions
:超时后的异常信息,默认抛出NoSuchElementException