一、Selenium交互
用selenium打开网页后,也可以做一系列真人的操作,也就是利用selenium和浏览器交互。以下几个函数较为重要:
- input.send_keys() 传递输入内容给某输入框
- button.click() 点击某按钮
- browser.execute_script()执行某脚本例如滑动页面
- browser.back()回到上一页面
- browser.forward()前往下一页面
下面的示例代码可以实现自动打开百度搜索,输入周杰伦,滑动页面到最底部,点击下一页,回退到上一页面,前进到下一页面,关闭浏览器的一系列操作(自动化,神奇!):
from selenium import webdriver
from selenium.webdriver.common.by import By
import time
path = 'chromedriver.exe'
browser = webdriver.Chrome(path)
url = 'https://www.baidu.com'
browser.get(url)
time.sleep(2)
# 找到输入框,并输入‘周杰伦’
input_ = browser.find_element(By.ID, 'kw')
input_.send_keys('周杰伦')
time.sleep(2)
# 找到’百度一下‘,并点击
button = browser.find_element(By.ID, 'su')
button.click()
time.sleep(2)
# 滑动页面到底部
js_bottom = 'document.documentElement.scrollTop=100000'
browser.execute_script(js_bottom)
time.sleep(2)
# 找到’下一页‘,并点击
next_page = browser.find_element(By.CLASS_NAME, 'n')
next_page.click()
# 返回上一页
browser.back()
time.sleep(2)
# 前进一页
browser.forward()
time.sleep(2)
# 关闭页面
browser.quit()
不过运行次数多了,百度会弹出一个安全验证,以判断你是不是真人,之后再研究如何破解。。
二、Chrome headless
selenium运行的速度较慢,一部分原因是它有界面。在selenium中还有两个可以让你不打开UI界面使用浏览器的方式,Phantomjs和headless。Phantomjs已经被弃用停止维护,所以这里只介绍headless。
其配置方式很固定,一般将其封装为一个函数。虽然没有UI界面,但是可以通过browser.save_screenshot()来获取浏览器屏幕截图。
代码如下
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
def share_browser():
chrome_options = Options()
chrome_options.add_argument('headless') #是--headless不是__headless
chrome_options.add_argument('--disable-gpu')
# 本机chrome浏览器所在位置
path = r'C:\Program Files (x86)\Google\Chrome\Application\chrome.exe'
chrome_options.binary_location = path
broswer = webdriver.Chrome(chrome_options=chrome_options)
return broswer
browser = share_browser()
url = 'https://www.baidu.com'
browser.get(url)
browser.save_screenshot('baidu.png')
总结
- selenium交互分为有界面和无界面两种方式
- 有界面交互能看到每一个步骤,但速度慢
- 无界面交互Phantomjs已被弃用,headless配置方法和函数封装直接copy即可。save_screenshot()可以浏览器截屏。