本文已参与「新人创作礼」活动,一起开启掘金创作之路。
代码运行:
from bs4 import BeautifulSoup
from selenium import webdriver
import random
from selenium.webdriver.edge.options import Options
from selenium.webdriver import Edge
from selenium import webdriver
from selenium.webdriver.common.by import By
from chaojiying import Chaojiying_Client
import time
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.remote.webelement import WebElement
from selenium.webdriver.common.action_chains import ActionChains
from selenium.webdriver.support.select import Select
s = Service(r"D:\pythonProject\venv\Lib\site-packages\selenium\webdriver\chrome\msedgedriver.exe")
a = input("请发表您的评论(验证码已破解):")
url = input("请输入道客巴巴评论页面:")
options = Options()
options.add_argument('--headless')
browser = webdriver.Edge(service=s, options=options)
browser.get('https://www.doc88.com/')
browser.find_element(By.XPATH, '//*[@id="account-login"]').click()
browser.find_element(By.XPATH, '//*[@id="loginname1"]').send_keys("自己道客的用户名")
browser.find_element(By.XPATH, '//*[@id="password1"]').send_keys("自己的密码")
time.sleep(5)
browser.find_element(By.XPATH, '//*[@id="login-btn"]').click()
sss = browser.find_element(By.XPATH, '/html/body/div[4]/div/div[1]/div[3]/div[2]/div/div/p').text
if sss == "账号或密码有误":
print("登录失败")
else:
print("登录成功")
time.sleep(5)
# browser.execute_script("window.open({})".format(url))
browser.get('{}'.format(url))
time.sleep(5)
# browser2 = webdriver.Edge(service=s)
# time.sleep(2)
# browser2.get('{}'.format(url))
# time.sleep(3)
js1 = "window.scrollTo(0, document.body.scrollHeight)"
browser.execute_script(js1)
time.sleep(3)
browser.find_element(By.XPATH, '//*[@id="txtMessage"]').send_keys(a)
time.sleep(3)
img = browser.find_element(By.XPATH, '//*[@id="codeimage"]').screenshot_as_png
chaojiying = Chaojiying_Client('用户名', '密码', 'ID') # 用户中心>>软件ID 生成一个替换 96001
# 本地图片文件路径 来替换 a.jpg 有时WIN系统须要//
dic = chaojiying.PostPic(img, 1004)
verify_code = dic['pic_str']
time.sleep(3)
browser.find_element(By.XPATH, '/html/body/div[6]/div/div/div[3]/div[6]/div[1]/form/table/tbody/tr[1]/td[1]/input').send_keys(verify_code)
browser.find_element(By.XPATH, '//*[@id="msgSubmitButton"]').click()
time.sleep(3)
print('评论成功')
browser.quit()
# time.sleep(30)
# browser2.quit()
#验证码图片 //*[@id="codeimage"]
#验证码窗口//*[@id="checkcode"]
# 提交按钮//*[@id="msgSubmitButton"]
效果图:
本文图一乐,是我上一个文章的衍生品, 那么,介绍一下本文,那就是通过超级鹰来破解验证码, 我们只需要在官网上下载python的源文件,然后通过import导入文件即可, 但是有个难题,那就是怎么通过自动化测试selenium框架来登录并发表自己的评论呢? 我首先尝试了一下,在文章页面尝试登录,但是有js脚本,打开了另一个页面,并且有滑动验证码,这个说实话可以模拟鼠标滑动来尝试拟合验证码,但是我在仔细观察之后发现有个更好的办法,那就是在官网首页,找到登录位置的xpath, 进行如下操作:browser.find_element(By.XPATH, '//*[@id="txtMessage"]').send_keys(a) ,然后找到登录位置,复制xpath,click()登录,再web打开自己想要评论的页面, 然后我们找到写评论的xpath,复制,同样的send_keys('评论内容') 这个时候会要求输入验证码,那我们就交给超级鹰,将验证码截屏成png格式,然后识别出来发送内容到验证码框,再找到发送button,click()就行了,我们也可以批量发送,加一个for循环就好了,记得加上sleep,道客某巴的评论部分就完成了,可能有人说我为什么要写个脚本发评论,我手打不就行了,额,也有道理嗷,但是如果以后想批量发多个网站的评论,或者想学习相关技术,本文可以为你做参考,当然,超级鹰只能识别中英文数字,不能滑动什么的,你像12306的验证码我们人都分不清,也足见验证码的迭代非常快,爬虫和反爬是一个相互促进的技术,所谓商场如战场,在国内这个数据为王的时代,爬虫和反爬就是相互促进的对手,我期待以后的爬虫技术能够更上一层楼