抓取 Javascript 元素,最好不要使用 Selenium

Amr*_*ngh 0 javascript python selenium beautifulsoup python-requests

目前,我使用 Selenium 从网站上的表格中提取文本。以下是代码:

from selenium import webdriver
from webdriver_manager.chrome import ChromeDriverManager


# Using Chrome to access web
browser = webdriver.Chrome(ChromeDriverManager().install())

# Open the website
browser.get('https://launchstudio.bluetooth.com/Listings/Search')
element = browser.find_element_by_id('searchButton').click()

table_text = browser.find_element_by_class_name('table').text

while len(table_text) < 80:
    table_text = browser.find_element_by_class_name('table').text

print(table_text)

browser.close()
Run Code Online (Sandbox Code Playgroud)

但是,我正在尝试找到一种方法对请求/美丽汤或任何其他库执行相同的操作,我可以将其安排为 Windows 中的任务,并每隔 x 间隔将结果存储在表中。显然,因为我希望所有这些都在后台发生,然后触发通知等。

我想要的是 - 打开这个网站,点击搜索按钮(或触发相应的 javascript),然后将表格导出为 Dataframe 或其他任何内容。

你能在这里指导我吗?

提前致谢!!

Kun*_*duK 5

如果你去,Network Tab你会得到API. 您可以使用此发布请求来获取所有值。使用最大结果字段您也可以限制结果。

在此处输入图片说明

https://platformapi.bluetooth.com/api/platform/Listings/Search

import requests
import  pandas as pd
data={
"searchString" : "",
"searchQualificationsAndDesigns": True,
"searchDeclarationOnly": True,
"bqaApprovalStatusId" : -1,
"bqaLockStatusId" : -1,
"layers" : [],
"listingDateEarliest" : "",
"listingDateLatest" : "",
"maxResults": 5000,
"memberId": "",
"productTypeId" : 0,
"searchDeclarationOnly" : True,
"searchEndProductList" : False,
"searchMyCompany" : False,
"searchPRDProductList" : True,
"searchQualificationsAndDesigns" : True,
"searchString" : "",
"specName": 0,
"userId" : 0
}

headers = {'User-Agent':
       'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/47.0.2526.106 Safari/537.36'}

url="https://platformapi.bluetooth.com/api/platform/Listings/Search"
response=requests.post(url,headers=headers,data=data).json()
df=pd.DataFrame(response)
print(df)
Run Code Online (Sandbox Code Playgroud)

您可以导入到 csv 文件。

df.to_csv("testresult.csv")
Run Code Online (Sandbox Code Playgroud)

在此处输入图片说明