我试图从 https://www.pikalytics.com/ 的左侧面板中抓取神奇宝贝名称和使用数据。我尝试使用 BeautifulSoup,但显然它只能抓取前 25 个数据,因为源代码没有完全扩展。因此,我必须在面板中向下滚动才能获得完全访问权限。但是如何?
这里我尝试过的解决方案:
driver = webdriver.Chrome()
driver.get('https://www.pikalytics.com')
panel = '//*[@id="mini_list_wrapper"]'
driver.find_element(By.XPATH, panel).send_keys(Keys.PAGE_DOWN)
因此它返回了元素不可交互的错误。我已经从其子节点尝试了一些其他 xpath,但没有一个起作用。
以下是使用 Selenium 在可滚动面板中向下滚动的方法:
1. 使用 JavaScript 执行滚动
可以使用 JavaScript 在 Selenium 中滚动特定元素。为此,需要找到可滚动面板的 WebElement,然后使用
execute_script()
方法执行 JavaScript 代码来滚动它。
以下是代码示例:
from selenium import webdriver
from selenium.webdriver.common.by import By
from time import sleep
driver = webdriver.Chrome()
driver.get('https://www.pikalytics.com/')
# 等待页面加载完成
sleep(5)
# 找到可滚动面板的 WebElement
panel = driver.find_element(By.XPATH, '//*[@id="mini_list_wrapper"]')
# 使用 JavaScript 滚动到底部
driver.execute_script("arguments[0].scrollTop = arguments[0].scrollHeight", panel)
# 等待页面加载完成
sleep(5)
# 现在可以抓取所有数据了
# 关闭浏览器
driver.quit()
这段代码会找到
mini_list_wrapper
元素,然后使用
scrollTop
属性将其滚动到底部。 可以根据需要修改 JavaScript 代码来控制滚动距离和方向。
2. 使用 Actions 类模拟滚动
另一种方法是使用 Selenium 的 Actions 类模拟鼠标滚轮滚动。
以下是代码示例:
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.common.action_chains import ActionChains
driver = webdriver.Chrome()
driver.get('https://www.pikalytics.com/')
# 等待页面加载完成
sleep(5)
# 找到可滚动面板的 WebElement
panel = driver.find_element(By.XPATH, '//*[@id="mini_list_wrapper"]')
# 使用 Actions 类模拟鼠标滚轮滚动
actions = ActionChains(driver)
actions.move_to_element(panel).perform()
actions.scroll_by_amount(0, 500).perform() # 向下滚动 500 像素
# 等待页面加载完成
sleep(5)
# 现在可以抓取所有数据了
# 关闭浏览器
driver.quit()
这段代码会将鼠标移动到可滚动面板上,然后使用
scroll_by_amount()
方法向下滚动 500 像素。 可以根据需要修改滚动距离和方向。
请注意,这两种方法都需要在滚动后添加适当的等待时间,以确保页面加载完成,然后再抓取数据。
标签:python,selenium-webdriver From: 78784075