Python 无法单击';更多';按循环键以获取所有完整的评论
我已经用python结合selenium创建了一个脚本,从google地图的某个页面获取所有评论。该页面中有很多评论,只有当该页面向下滚动时,它们才可见。我的脚本可以成功地完成所有这些任务 然而,我目前面临的唯一问题是,一些评论中有Python 无法单击';更多';按循环键以获取所有完整的评论,python,python-3.x,selenium,selenium-webdriver,web-scraping,Python,Python 3.x,Selenium,Selenium Webdriver,Web Scraping,我已经用python结合selenium创建了一个脚本,从google地图的某个页面获取所有评论。该页面中有很多评论,只有当该页面向下滚动时,它们才可见。我的脚本可以成功地完成所有这些任务 然而,我目前面临的唯一问题是,一些评论中有更多按钮,该按钮旨在单击以显示完整的评论 其中之一是: 我试过: from selenium import webdriver from selenium.webdriver.common.by import By from selenium.webdriver.
更多
按钮,该按钮旨在单击以显示完整的评论
其中之一是:
我试过:
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
link = "https://www.google.com/maps/place/Pizzeria+Di+Matteo/@40.8512552,14.255779,17z/data=!4m7!3m6!1s0x133b0841ef6e38e5:0xece6ea09987e9baf!8m2!3d40.8512512!4d14.2579677!9m1!1b1"
driver = webdriver.Chrome()
driver.get(link)
wait = WebDriverWait(driver,10)
while True:
try:
elem = wait.until(EC.visibility_of_element_located((By.CSS_SELECTOR, "[class='section-loading-spinner']")))
driver.execute_script("arguments[0].scrollIntoView();",elem)
except Exception:
break
for see_more in wait.until(EC.presence_of_all_elements_located((By.CSS_SELECTOR, "button[class^='section-expand-review']"))):
see_more.click()
for item in wait.until(EC.visibility_of_all_elements_located((By.CSS_SELECTOR, ".section-review-content"))):
name = item.find_element_by_css_selector("[class='section-review-title'] > span").text
try:
review = item.find_element_by_css_selector("[class='section-review-text']").text
except AttributeError:
review = ""
print(name)
driver.quit()
当前,上面的脚本在点击这一行时抛出stale元素
错误,以查看更多等待中的内容。直到()。单击()
如何循环单击
更多按钮以获得所有完整的评论?
如果使用WebdriverWait
和存在所有位于的元素,它将在给定时间内等待搜索该元素,如果该元素未附加到html,您将收到错误
但是,如果有,请检查网页中元素的长度,然后单击该元素
if len(driver.find_elements_by_css_selector("button[class^='section-expand-review']"))>0:
driver.find_element_by_css_selector("button[class^='section-expand-review']").click()
这是代码
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
link = "https://www.google.com/maps/place/Ecstasy/@23.7399982,90.3732109,17z/data=!3m1!4b1!4m7!3m6!1s0x3755b8caa669d5e3:0x41f47ddcc39a556e!8m2!3d23.7399933!4d90.3753996!9m1!1b1"
driver = webdriver.Chrome()
driver.get(link)
wait = WebDriverWait(driver,10)
while True:
try:
elem = wait.until(EC.visibility_of_element_located((By.CSS_SELECTOR, "[class='section-loading-spinner']")))
driver.execute_script("arguments[0].scrollIntoView();",elem)
except Exception:
break
if len(driver.find_elements_by_css_selector("button[class^='section-expand-review']"))>0:
driver.find_element_by_css_selector("button[class^='section-expand-review']").click()
print('pass')
for item in wait.until(EC.visibility_of_all_elements_located((By.CSS_SELECTOR, ".section-review-content"))):
name = item.find_element_by_css_selector("[class='section-review-title'] > span").text
try:
review = item.find_element_by_css_selector("[class='section-review-text']").text
except AttributeError:
review = ""
print(name)
driver.quit()
已编辑
if len(driver.find_elements_by_css_selector("button[class^='section-expand-review']"))>0:
for item in driver.find_elements_by_css_selector("button[class^='section-expand-review']"):
item.location_once_scrolled_into_view
item.click()
time.sleep(2)
这是我的工作:-
您可以将其放入for循环或您的方法中以获得所有评论
try:
driver.find_element_by_class_name("mapsConsumerUiSubviewSectionReview__section-expand-review").click()
except:
continue
您的解决方案不一致。我试了几次,发现它一直在点击那个按钮,但在执行过程中的某个地方,它出现了相同的错误。顺便说一句,由于您没有定义任何循环,如果每个滚动中有多个more
按钮,那么如何在所有more
按钮上启动该单击?谢谢。@MITHU:我已经试过几次相同的代码,我发布了,效果很好。我不知道为什么你会出错。第二件事你也可以在那里循环。选中编辑选项。你没有遇到任何错误的原因是因为我在帖子的第一个位置使用的url包含很少的评论。我已经编辑了我的帖子,把上面图片的原始url放在那里。谢谢。这有点棘手。不过我可以试一下,让我知道进展如何。查看编辑的部分