社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  Python

使用Python Selenium进行AmCharts抓取

ahmed osama • 3 年前 • 1431 次点击  

我在努力刮 AmCharts 从这个 URL

使用以下命令

driver.execute_script("AmCharts.charts[0].dataProvider")

在脚本中,它返回 None 当浏览器控制台返回JSON对象时 阿姆查特 数据

enter image description here

在web界面中显示为这样 enter image description here

如何正确检索此数据提供程序数组。提前谢谢。

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/133237
 
1431 次点击  
文章 [ 2 ]  |  最新文章 3 年前
cruisepandey
Reply   •   1 楼
cruisepandey    3 年前

该图形不在Selenium view端口中,因此首先我们必须处理垂直滚动到所需图形的问题,然后我看到了 //*[name()='tspan'] xpath包含水平和垂直值,这些值也存在于UI中。

代码:

driver_path = r'D:\\chromedriver.exe'

driver = webdriver.Chrome(driver_path)
driver.maximize_window()
wait = WebDriverWait(driver, 30)

driver.get("https://eg.pricena.com/en/product/oppo-reno-5g-price-in-egypt")

driver.execute_script("window.scrollTo(0, 1000)")

ele = driver.find_element_by_xpath("//*[name()='svg']")
driver.execute_script("arguments[0].scrollIntoView(true);", ele)

char_val = []
for elem in driver.find_elements(By.XPATH, "//*[name()='tspan']"):
    print(elem.text)

进口:

from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC

输出:

Mar
May
Jul
Sep
Nov
Mar
May
Jul
Sep
Nov
5,000
5,500
6,000
6,500
7,000
7,500
8,000

Process finished with exit code 0
xorspark
Reply   •   2 楼
xorspark    3 年前

你需要补充 return 给你的 execute_script 调用以访问脚本中的值,例如。 driver.execute_script("return AmCharts.charts[0].dataProvider")

完整代码如下:

from selenium import webdriver
from selenium.webdriver.support.ui import WebDriverWait

driver_path = r"path/to/chromedriver"

driver = webdriver.Chrome(driver_path)
driver.maximize_window()
wait = WebDriverWait(driver, 30)

driver.get("https://eg.pricena.com/en/product/oppo-reno-5g-price-in-egypt")

# scroll into the div so that the chart will render
driver.execute_script("document.getElementById('product_pricechart').scrollIntoView()")

# wait until the chart div has been rendered before accessing the data provider
wait.until(lambda x: x.find_element_by_class_name("amcharts-chart-div").is_displayed())

# display chart data
print(driver.execute_script("return AmCharts.charts[0].dataProvider"))

driver.close()