我在尝试使用 Selenium ChromeDriver 向下滚动谷歌地图结果页面的侧边栏时遇到了问题。我试图获得第 6 个结果,但在您向下滚动之前结果不会完全加载。使用 find_element_by_xpath
方法,我能够成功访问结果 1-5 并分别单击它们,但是在尝试使用 actions.move_to_element(link).perform()
滚动到第 6 个元素的方法,它不起作用并抛出错误消息。
我得到的错误是: selenium.common.exceptions.NoSuchElementException:消息:没有这样的元素:无法定位元素:
但是,我知道这个元素存在,因为当我手动滚动并加载更多结果时,Xpath 工作正常。我究竟做错了什么?我花了很多时间试图解决这个问题,但我无法解决可用的内容。感谢您提供的任何帮助或见解,谢谢!
from selenium.webdriver.common.action_chains import ActionChains
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from bs4 import BeautifulSoup as soup
import time
PATH = "C:\Program Files (x86)\chromedriver.exe"
driver = webdriver.Chrome(PATH)
driver.get("https://www.google.com/maps")
time.sleep(7)
page = soup(driver.page_source, 'html.parser')
#find the searchbar, enter search, and hit return
search = driver.find_element_by_id('searchboxinput')
search.send_keys("dentists in Austin Texas")
search.send_keys(Keys.RETURN)
driver.maximize_window()
time.sleep(7)
#I want to get the 6th result down but it requires a sidebar scroll to load
link = driver.find_element_by_xpath("//*[@id='pane']/div/div[1]/div/div/div[4]/div[1]/div[13]/div/a")
actions.move_to_element(link).perform()
link.click()
time.sleep(5)
driver.back()```
最佳答案
我找到了一个有效的解决方案,它是从 selenium 的 javascript 接口(interface)中定位 XPATH 中的元素。然后,您必须在一条指令上执行两个命令(定位和滚动)
driver.executeScript("var el = document.evaluate('/html/body/jsl/div[3]/div[10]/div[8]/div/div[1]/div/div/div[4]/div[1]', document, null, XPathResult.FIRST_ORDERED_NODE_TYPE, null).singleNodeValue; el.scroll(0, 5000);");
这是唯一对我有用的解决方案
关于python - 如何使用 selenium ChromeDriver 滚动 Google map 上的侧边栏以加载更多结果?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67783868/