上一篇(https://blog.youkuaiyun.com/weixin_44526949/article/details/86735754)学习了pyquery,pyquery的使用类似于jquery,当我们在解析网页时,对网页中的内容,比如元素、元素标签、DOM操作等等,pyquery会非常的方便。本期来学习一个新的模块的使用方法,这个模块就是Selenium模块。该模块是一个自动化测试工具,在之前的博文中也有所提及,本期来具体学习其使用方法。Selenium模块作为一种自动化测试工具,支持多种浏览器,可以驱动浏览器来完成一些操作。在做爬虫时,主要用来解决JavaScript渲染的问题。
基本使用:
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.support.wait import WebDriverWait
browser = webdriver.Firefox()
try:
browser.get("http://www.baidu.com")
input = browser.find_element_by_id("kw")
input.send_keys("Python")
input.send_keys(Keys.ENTER)
wait = WebDriverWait(browser, 10)
wait.until(EC.presence_of_element_located((By.ID,"content_left")))
print(browser.current_url)
print(browser.get_cookies())
print(browser.page_source)
finally:
browser.close()
通过上面的代码便完成了自动打开Firefox浏览器,并且打开百度,在搜索框自动搜索Python这个关键字,并且获取网页内容。这样的一个智能化的上网流程。
接下来对上面的操作展开来说明这个过程,使用selenium的工作流程。
声明浏览器对象:
from selenium import webdriver
browser = webdriver.Chrome() # google Chrome
browser = webdriver.Firefox() # mozilla Firefox
browser = webdriver.Edge() # Microsoft Edge
browser = webdriver.PhantomJS() # 无界面浏览器
browser = webdriver.Safari() # Apple Safari
这些浏览器在运行时,需要相应的驱动包,只要安装好驱动包,便可以打开浏览器,比如Chrome浏览器的chromedriver。这些安装方法之前已经介绍过,这里不再说明。
访问页面:
from selenium import webdriver
browser = webdriver.Chrome()
browser.get("https://www.taobao.com")
print(browser.page_source)
browser.close()
查找元素:
# 查找单个元素
from selenium import webdriver
browser = webdriver.Chrome()
browser.get("https://www.taobao.com")
# 查找单个元素的方法一
input_first = browser.find_element_by_id("q")
input_second = browser.find_element_by_css_selector("#q")
input_third = browser.find_element_by_xpath('//*[@id="q"]')
print(input_first, input_second, input_third)
# 查找单个元素的方法二
input_forth = browser.find_element(By.ID,'q') # 一种查找单个元素的通用方法
# 查找多个元素的方法一
lis = browser.find_elements_by_css_selector(".service-bd li")
print(lis)
# 查找多个元素的方法二
liss = browser.find_elements(By.CSS_SELECTOR,".service-bd li") # 一种查找
#多个元素的通用方法
print(liss)
browser.close()
元素的交互操作:
from selenium import webdriver
import time
browser = webdriver.Chrome()
browser.get("https://www.taobao.com")
input = browser.find_element_by_id("q")
input.send_keys('iphone')
time.sleep(1)
input.clear()
input.send_keys("iPad")
button = browser.find_element_by_class_name("btn-search")
button.click()
浏览器的前进与后退:
import time
from selenium import webdriver
browser = webdriver.Firefox()
browser.get("https://www.baidu.com/")
browser.get("https://www.taobao.com/")
browser.get("https://translate.google.cn/")
browser.back()
time.sleep(1)
browser.forward()
browser.close()
Cookies
from selenium import webdriver
browser = webdriver.Chrome()
browser.get("https://www.zhihu.com/explore")
print(browser.get_cookies())
browser.add_cookie({"name":"name","domain":"www.zhihu.com","value":"ZhangSan"})
print(browser.get_cookies())
browser.delete_all_cookies() # 删除所有的cookie
print(browser.get_cookies())
选项卡管理
import time
from selenium import webdriver
browser = webdriver.Chrome()
browser.get("https://www.baidu.com")
browser.execute_script("window.open()")
print(browser.window_handles)
browser.switch_to_window(browser.window_handles[1]) # 切换到第二个选项卡
browser.get("https://www.taobao.com")
time.sleep(1)
browser.switch_to_window(browser.window_handles[0]) # 切换到第一个选项卡
browser.get("https://python.org")
异常处理
from selenium import webdriver
from selenium.common.exceptions import TimeoutException,NoSuchElementException
browser = webdriver.Chrome()
try:
browser.get("https://www.baidu.com")
except TimeoutException:
print("Time Out")
try:
browser.find_element_by_id("hello")
except NoSuchElementException:
print("No Element")
finally:
browser.close()
关于Selenium的使用,就介绍到这里,如果有其他更多的需求,可以查找网上的一些资料。下次,我们会使用之前的工具来进行爬虫实践。