Python 无法单击';更多';按循环键以获取所有完整的评论

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.

我已经用python结合selenium创建了一个脚本,从google地图的某个页面获取所有评论。该页面中有很多评论,只有当该页面向下滚动时,它们才可见。我的脚本可以成功地完成所有这些任务

然而,我目前面临的唯一问题是,一些评论中有
更多
按钮,该按钮旨在单击以显示完整的评论

其中之一是:

我试过:

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放在那里。谢谢。这有点棘手。不过我可以试一下,让我知道进展如何。查看编辑的部分