首页 > 编程语言 >Python web自动化爬虫-selenium/处理验证码/Xpath

Python web自动化爬虫-selenium/处理验证码/Xpath

时间:2024-07-18 16:41:51浏览次数:12  
标签:Xpath web name img Python driver value sleep time

# coding:utf-8
import time
import random
from time import sleep
from csv import writer
from selenium import webdriver
from selenium.webdriver.common.by import By
from chaojiying import Chaojiying_Client
from selenium.webdriver import ActionChains


driver = webdriver.Chrome()

#打开网页
def open_web(search_name):
    driver.get("https://www.izaiwen.cn/pro/sonE-stwE08?psnname={}".format(search_name))
    time.sleep(6)
#加载cookie
#    with open("cookies.json", "r") as file:
#        cookies = json.load(file)
    cookies = [{'name': 'HMACCOUNT', 'value': 'xxxxxxxxx'},
    {'name': 'heiheihei', 'value': 'xxxxxxxxx'},
    {'name': 'hahaha', 'value': 'xxxxxxx'},
    {'name': '_', 'value': 'xxxxxxxxxxx'},
    {'name': 'acw', 'value': 'xxxxxxxxxxxx'},
    {'name': 'cer', 'value': 'xxxxxxxxxx'},
    {'name': 'ession', 'value': 'xxxxxxxxxx'},
    {'name': 'userId', 'value': 'xxxxx'},
    {'name': 'uuid', 'value': 'xxxxxxxxxxxxxxxxxxx'},
    ] 
    for cookie in cookies:
        driver.add_cookie(cookie)
    time.sleep(5)
    driver.refresh()
    time.sleep(random.randrange(5,10))

#检测是否在验证码页面
def check_condition():
    header=driver.title#提取页面标题
#    header=driver.find_element(By.XPATH,'/html/head/title').text  此方法无效,只能取出空字符串
    print(header)
    if header == '请完成安全验证': #如果在验证码页面返回f值
        return 'f'
    else:
        return 't'

#基于xpath定位标签获取数据
def get_information():
    parent_element=driver.find_elements(By.XPATH,'.//div[@class="item-box layui-card "]')
    for child_element in parent_element:
        target_element=child_element.find_elements(By.XPATH,'.//div[@class="layui-col-xs4"]')
        print(name)
        info=''
        for n in target_element:
            info+=n.text#提取标签中的数据
            info+=','
        print(info)
        list_data=[name,info]
        #保存数据
        with open("信息.csv", "a", newline="") as f_object:
            writer_object = writer(f_object)
            writer_object.writerow(list_data)
        time.sleep(5)
#自动识别验证码并提交至超级鹰打码平台识别
def anti_anti_spider():
    #找到包含验证码的元素
    img=driver.find_element(By.XPATH,'.//div[@id="aliyunCaptcha-window-embed"]')
    #对此元素进行截图
    img.screenshot('D:/SeleniumX/yzm.png')
    #由于新版本的selenium的点击定位是从元素中心点开始,因此计算元素的尺寸来使点击从左上角开始
    img_half_width = float(img.rect['width'])/2
    img_half_height = float(img.rect['height'])/2
    #初始化超级鹰代码,需要从其官网下载代码放到此文件相同文件夹中并导入
    chaojiying = Chaojiying_Client('', '', '')#账号,密码,软件ID
    #提交到平台并获得结果
    im = open('D:/SeleniumX/yzm.png', 'rb').read()
    yzm_result=chaojiying.PostPic(im, 9101)['pic_str']
    time.sleep(10)
    print(yzm_result)
#    for index in result.split('|'): #以"|"进行分割,得到一个列表,并循环出每一个字的坐标,在这里因为只返回一个结果所以不需要
    x = float(yzm_result.split(',')[0]) # 得到x轴的坐标
    y = float(yzm_result.split(',')[1]) # 得到y轴的坐标
    #使用动作链模拟点击操作
    action = ActionChains(driver) #创建动作链,y).click().perform()
    action.move_to_element_with_offset(img,x-img_half_width,y-img_half_height).click().perform()
    time.sleep(10)

    

#主程序
list_name=[]#需要爬取的人名,用于构建页面url
for name in list_name:
    open_web(name)#打开该网页
    flag=check_condition()#检测是否触发了验证码
    print(flag)
    if flag == 'f':#若触发了验证码,开始识别并点击验证码
        time.sleep(30)
        anti_anti_spider()
        time.sleep(15)
        get_information()
    else:
        time.sleep(5)
        get_information()
    time.sleep(random.randrange(10,30))
    print(name)

 

标签:Xpath,web,name,img,Python,driver,value,sleep,time
From: https://www.cnblogs.com/Vicrooor/p/18309861

相关文章

  • 【Python】通过Cython提升性能
    一、什么是Cython,如果你了解Python,就会知道Python相比于其他语言,性能差了不是一点半点。但是Python的底层实现大量使用了C语言,可以与C语言很好的结合。并且在Python中由于GIL全局解释器锁的机制,导致python在实现CPU密集型操作时非常吃力。Cython是Python的一个扩展,用于将Python代......
  • Python学习:Python数据类型大盘点
    Python的数据类型非常丰富,它们为编程提供了强大的工具来处理各种数据。以下是对Python数据类型的详细盘点:数值类型:整型(Integers):用于表示整数,可以是正数、负数或零。在Python中,整型可以表示的数值范围是平台特定的。浮点型(FloatingPointNumbers):用于表示带有小数部分的数......
  • 【Python】通过Cython提升性能
    一、什么是Cython,如果你了解Python,就会知道Python相比于其他语言,性能差了不是一点半点。但是Python的底层实现大量使用了C语言,可以与C语言很好的结合。并且在Python中由于GIL全局解释器锁的机制,导致python在实现CPU密集型操作时非常吃力。Cython是Python的一个扩展,用于将Py......
  • 【Python】使用PySide6 + Qt Designer创建简易用户界面(含用户交互)
    【Python】使用PySide6+QtDesigner创建简易用户界面(含用户交互)文章目录【Python】使用PySide6+QtDesigner创建简易用户界面(含用户交互)相关代码运行环境操作过程1.PySide6和QtDesigner的安装2.创建外部工具PyUIC和QtDesigner3.QtDesigner的简单使用说明4.完整代......
  • 一个python代码
     一个python代码importosimportnumpyasnpimportrefrompathlibimportPathoutput_folder='./data'filename_lineEdge=r'./data/fx0022/dom1lines_Edge.txt'filename_jgw=r'./data/fx0022/test/dom1.jgw'#读取线段文件data=[]i=......
  • 基于SpringBoot的宠物领养系统-07863(免费领源码+开发文档)可做计算机毕业设计JAVA、PHP
    摘 要21世纪的今天,随着社会的不断发展与进步,人们对于信息科学化的认识,已由低层次向高层次发展,由原来的感性认识向理性认识提高,管理工作的重要性已逐渐被人们所认识,科学化的管理,使信息存储达到准确、快速、完善,并能提高工作管理效率,促进其发展。论文主要是对宠物领养系统......
  • ubuntu 20 pyenv安装python环境
    安装pyenvgitclonehttps://github.com/pyenv/pyenv.git~/.pyenv或者自动安装程序curlhttps://pyenv.run|bash依赖库sudoapt-getupdatesudoapt-getupgradesudoapt-getinstallgccmakezlib1g-devdist-upgradesudoapt-getinstalllibbz2-devbuild-essenti......
  • python中的 == 和 is
    在Python中,==和is都是用于比较两个值的运算符,但它们的用途和含义不同。理解它们之间的区别对于编写正确的代码非常重要。==运算符==运算符用于比较两个对象的值是否相等。它检查对象的内容是否相同,而不关心它们是否是同一个对象。a=[1,2,3]b=[1,2,3]print(a......
  • 【web]-php反序列化-复杂1(转)
    转自:PHP反序列化-CSDN博客反序列化漏洞是基于序列化和反序列化的操作,在反序列化——unserialize()时存在用户可控参数,而反序列化会自动调用一些魔术方法,如果魔术方法内存在一些敏感操作例如eval()函数,而且参数是通过反序列化产生的,那么用户就可以通过改变参数来执行敏感操作......
  • 实现基于Spring Boot和WebSockets的实时通讯应用
    实现基于SpringBoot和WebSockets的实时通讯应用大家好,我是微赚淘客系统3.0的小编,是个冬天不穿秋裤,天冷也要风度的程序猿!实时通讯应用在现代互联网服务中越来越重要。使用WebSocket可以实现客户端和服务器之间的双向通讯,从而大大提高实时性。本文将介绍如何使用SpringBoot和Web......