1. 程式人生 > >selenium直接用滑鼠點選(基於x,y座標)進行網頁爬取

selenium直接用滑鼠點選(基於x,y座標)進行網頁爬取

 食品生產許可獲證企業(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()