- 本章最后来演示一个网页自动投票的案例,带领大家体验Selenium库在爬虫领域之外的应用。这里笔者构建一个本地的HTML网页(见本书配套代码文件中的vote.html),在浏览器中打开效果如下图所示。
- 其投票逻辑非常简单,选中想要投票的部门,单击“确认投票”按钮,如下图所示。
- 随后会弹出一个提示框,单击“确定”按钮即可关闭提示框,如下图所示。
- 实现自动投票的思路也很简单:用Selenium库访问网页,再依次模拟单击响应的按钮。先用Selenium库访问网页,代码如下:
from selenium import webdriver
import time
browser = webdriver.Chrome()
browser.get(r'D:\works\python_crawl1\第4章 Selenium 库深度讲解\vote.html')
- 需要注意的是,第4行代码中的网址必须是HTML文件的绝对路径,虽然Python可以识别相对路径下的HTML文件。
- 访问网页后,用开发者工具获取选项按钮和“确认投票”按钮的XPath表达式,然后在代码中用Selenium库的find_element_by_xpath()函数定位相关元素,再用click()函数模拟单击。而投票后弹出的提示框需要用switch_to.alert.accept()来处理。这里以第一个选项“综合管理部”为例来演示投票,代码如下:
from selenium import webdriver
import time
browser = webdriver.Chrome()
browser.get(r'D:\works\python_crawl1\第4章 Selenium 库深度讲解\vote.html')
for i in range(10):#循环10次,表示投票10次
browser.find_element_by_xpath('//*[@id="main"]/tbody/tr[17]/td').click() #模拟单击某选项
browser.find_element_by_xpath('//*[@id="main"]/tbody/tr[19]/td/input').click()#模拟单击“确认投票”按钮
browser.switch_to.alert.accept() #切换到提示框,并模拟单击“确定”按钮
time.sleep(1)
- 最终自动投票结果如下图所示,成功地给“综合管理部”投了10票。
- 实战中的网页投票当然不会如此简单,而是会采取一些防止作弊的措施,如投票前需要进行手机号码或微信验证,或者限制相同IP地址投票的次数(可以参考第8章的内容来应对)。不过,本案例演示的方法还是可以应用于自动填写自动化办公网页中的一些无须验证的表单。