如果没有百度账号,需要使用手机号注册,建议使用小号,百度的产品指不定就封号。完成用户注册之后,我们进入百度答题网页,该网页是显示某个分类的问题列表,每条问题代表一条连接,单击即可进入问题详情页。
在问题详情页,我们需要根据题目搜索正确答案,然后将答案写到问题详情页的回答文本框里,最后单击提交回答按钮即可实现答题。首先获取问题详情页的题目,然后根据题目搜索答案,在答案列表页中逐一访问每个答案的链接,在答案详情页中获取合理的答案,最后将答案写回到问题详情页中。
整个项目可以分为5个步骤来实现,每个步骤具体说明如下:
(1)在https://zhidao.baidu.com/list?cid=110上获取问题列表,得到全部问题的地址链接,然后遍历访问这些链接,依次进入问题的详情页。
(2)在问题详情页获取问题题目,题目是用于搜索相关的答案。
(3)搜索答案的地址链接都是固定的,只要替换地址中wd后面的内容即可搜索相关的答案。
(4)得到搜索结果后,获取答案列表的地址并遍历访问即可进入答案详情页,如果答案详情页里面有最佳答案就会获取答案内容,并且终止答案列表的遍历。
(5)将得到的答案写回到问题详情页的回答文本框并单击提交回答按钮即可完成答题。
整个项目在实现过程中是在用户已登录的情况下执行,如果使用百度的账号密码去执行用户登录,就会遇到手机验证码或图片验证码。用户登录后,网站会一直保持用户的登录状态,不管用户是否重启浏览器,只要访问百度网址,用户登录信息就会显示出来。利用用户登录的状态,Selenium可以模拟用户登录并将用户登录后的Cookies保存下来,在下次登录的时候,直接读取并操控Cookies即可完成用户登录。功能代码如下:
from selenium import webdriver
import time, json,re
from urllib.parse import quote
def get_cookies():
# 百度登录用户并保存Cookies
driver=webdriver.Chrome()
driver.get('https://www.baidu.com/')
driver.find_element_by_