selenium直接用鼠标点击(基于x,y坐标)进行网页爬取

本文介绍了如何利用selenium通过鼠标点击坐标的方式,爬取动态加载且请求加密的食品生产许可获证企业信息。由于selenium在操作页面数据后无法请求下一页,因此需逐页手动跳转,无法实现连续翻页功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 食品生产许可获证企业(SC)的爬取

只有名字和编号

这个网站是动态加载,并对请求ur进行了加密l

所以使用selenium

但是,selenium使用不知道为什么一旦进行了对页面数据的操作后,就无法请求到下一页的数据了,所以只能一页一页的请求不停的从第一页跳转,不能使用下一页跳转

from selenium import webdriver
import pyautogui as pag
from selenium.webdriver.common.keys import Keys
from selenium.webdriver import ActionChains
import time
import pyautogui
#创建浏览器对象


def find_coordinate():
    """返回下一页坐标,最大页数"""
    #"""返回文本框坐标,go按钮位置,和最大页数 """
    d = webdriver.Chrome()#可以看到浏览器界面

    d.implicitly_wait(10)#隐性等待10秒如果10秒内该窗口完成渲染渲染完毕就不再等待,10秒还未渲染成功就不再等待

    d.maximize_window()#窗口最大化
    time.sleep(2)
    d.get('http://app1.sfda.gov.cn/datasearch/face3/base.jsp?tableId=120&tableName=TABLE120&title=%CA%B3%C6%B7%C9%FA%B2%FA%D0%ED%BF%C9%BB%F1%D6%A4%C6%F3%D2%B5(SC)&bcId=145275419693611287728573704379')
    time.sleep(3)
    text_location = d.find_element_by_xpath('//*[@id="goInt"]').location  # 输入框所在位置
    go_location = d.find_element_by_xpath('//*[@id="content"]/div/table[4]//tr/td[7]/input').location  # go按钮所在位置
    ma = 9595
    # time.sleep(5)
    d.close()
    return text_location,go_location, ma
def get_text(z1,z2,pagination):
    """传入文本框位置,go按钮位置,查找的页数
    返回要查找的信息(公司名及代号)"""
    d = webdriver.Chrome()#可以看到浏览器界面

    d.implicitly_wait(10)#隐性等待10秒如果10秒内该窗口完成渲染渲染完毕就不再等待,10秒还未渲染成功就不再等待

    d.maximize_window()#窗口最大化
    time.sleep(2)
    d.get('http://app1.sfda.gov.cn/datasearch/face3/base.jsp?tableId=120&tableName=TABLE120&title=%CA%B3%C6%B7%C9%FA%B2%FA%D0%ED%BF%C9%BB%F1%D6%A4%C6%F3%D2%B5(SC)&bcId=145275419693611287728573704379')
    # 文本框输入
    pag.click(z1[0]+10 , z1[1]+10 )#点击文本框
    time.sleep(1)
    pyautogui.hotkey('ctrl', 'a')#按下ctrl+a,全选文本框内容
    pag.typewrite(str(pagination))#输入要跳转页数
    time.sleep(1)
    pag.click(z1[0]+10+60 , z1[1]+10)#根据文本框位置定位go按钮位置并点击
    time.sleep(2)
    node_list = d.find_elements_by_xpath('//*[@id="content"]/table[2]//tr/td/p/a')  # 获取所需信息
    # print(node_list)
    data = []
    for node in node_list:
        t = node.get_attribute('text')
        print(t)
        data.append(t)
    d.close()
    return data
def writ(data):
    with open('公司.txt','a',encoding='utf-8')as f:
        for i in data:
            f.write(i+'\n')

def run():
    z1,z2,max = find_coordinate()
    z1 =[z1['x'],z1['y']+110]#因为使用的是pyautogui所以定位的位置和移动的位置有偏差也就是高度偏差110左右(具体的网页具体分析,不一定都是这么高)
    z2 = [z2['x'], z2['y']]#z2没用到所以没用但是因为代码原因.没删
    # print(z1,z2)
    for i in range(1,max+1):
        data = get_text(z1,z2,i)
        writ(data)
if __name__ == '__main__':
    run()

 

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值