拨开荷叶行,寻梦已然成。仙女莲花里,翩翩白鹭情。
IMG-LOGO
主页 文章列表 使用Selenium更改Google地图评论排序

使用Selenium更改Google地图评论排序

白鹭 - 2022-01-26 1986 0 0

我的 **Web Scraping** 用例遇到了有趣的问题。我需要获取最新的 **Google 地图评论**。
我想按最新日期对评论进行排序。我正在观看的所有教程都是英文的,但在我的母语中,用户界面与那些教程不同。
我可以使用 **Selenium** 和按钮的 **XPATH** 单击按钮,但我不知道如何从可见的下拉选单中更改排序选项。
# Click the sort button
driver.find_element_by_xpath('//*[@id="pane"]/div/div[1]/div/div/div[2]/div[8]/button').click()

使用 Selenium 更改 Google 地图评论排序

select_by_visible_text()select_by_value()对我不起作用,因为我无法选择按钮并且在 div 上不起作用。

我正在使用的 URL:链接
查看我的 UI 更改为立陶宛语。

uj5u.com热心网友回复:

首先,您必须学习如何创建正确的 XPath 定位器。
长 XPath 表达式太脆弱了。
“排序评论”按钮定位器而不是
//*[@id="pane"]/div/div[1]/div/div/div[2]/div[8]/button可以
//button[@aria-label='Sort reviews']
//button[@data-value='Sort']
单击此按钮后,按最新日期对评论进行排序,您可以单击此元素://li[@data-index='1']
所以基本上这将起作用:

driver.find_element_by_xpath("//li[@data-index='1']").click()

但是由于您需要在单击排序按钮后等待对话框打开,您需要利用预期条件等待,如下所示:

wait = WebDriverWait(driver, 20)
wait.until(EC.visibility_of_element_located((By.XPATH, "//li[@data-index='1']"))).click()

为此,您将需要以下汇入:

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

uj5u.com热心网友回复:

这段代码应该可以作业。

单击“排序”按钮后,我添加了一个 webdriverwait 等待直到下拉串列中的所有选项都可见,然后单击“最高评分”。 //li[@role='menuitemradio'])[3]指下拉串列中的第三个元素,即“最高评分”。我尝试使用特定的文本而不是依赖元素索引,但不知何故它不起作用。但是下面的代码确实对评论进行了排序。

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from webdriver_manager.chrome import ChromeDriverManager
import time

driver = webdriver.Chrome(ChromeDriverManager().install())
driver.maximize_window()
driver.get("https://www.google.com/maps/place/Senukai/@54.6832836,25.183965,12z/data=!4m11!1m2!2m1!1svilnius senukai!3m7!1s0x46dd94055529fabf:0xb1132b0ad981d43b!8m2!3d54.7098368!4d25.2999662!9m1!1b1!15sCg92aWxuaXVzIHNlbnVrYWkiA4gBAVoRIg92aWxuaXVzIHNlbnVrYWmSARhidWlsZGluZ19tYXRlcmlhbHNfc3RvcmU")
print(driver.title)
time.sleep(5)
driver.find_element(By.XPATH, "//button[@data-value='Sort']").click()
WebDriverWait(driver, 10).until(EC.visibility_of_all_elements_located((By.XPATH, "//li[@role='menuitemradio']")))
driver.find_element(By.XPATH, "(//li[@role='menuitemradio'])[3]").click()
time.sleep(2)
driver.quit()

PS 我time.sleep偶尔会做一个快速的代码,但用它来WebdriverWait代替会是一个好习惯time.sleep

标签:

0 评论

发表评论

您的电子邮件地址不会被公开。 必填的字段已做标记 *