当前位置: 首页 > 知识库问答 >
问题:

Selenium Python在获取谷歌评论时无法向下滚动

宿嘉
2023-03-14
self.driver = webdriver.Chrome(executable_path="./chromedriver.exe",chrome_options=webdriver.ChromeOptions())
company_name = self.driver.find_element_by_name("q")
company_name.send_keys("STANLEY BRIDGE CYCLES AND SPORTS LIMITED ")
time.sleep(2)
self.driver.find_element_by_name("btnK").click()
time.sleep(2)
self.driver.find_elements_by_link_text("View all Google reviews")[0].click()
time.sleep(2)

即使使用上面的代码向下滚动页面,我仍然只得到10个评论。不过我没有得到任何错误。

需要帮助如何向下滚动页面,以获得至少20个评论。到目前为止,我只能得到10个评论。根据我对此问题的在线搜索,人们大多使用:“driver.execute_script(”window.scrollto(0,document.body.scrollheight);“)”若要随时向下滚动页面,请执行以下操作。但对我来说这不起作用。我检查了页面前后的高度(“driver.execute_script(”window.scrollto(0,document.body.scrollheight);“))是一样的。

共有1个答案

曾昂然
2023-03-14

使用Javascript滚动到最后一次审查,这将触发额外的审查负载。

last_review = self.driver.find_element_by_css_selector('div.gws-localreviews__google-review:last-of-type')
self.driver.execute_script('arguments[0].scrollIntoView(true);', last_review)

编辑:

下面的例子对我来说在Firefox和Chrome上是正确的,你可以根据你的需要重用提取谷歌评论功能

import time

from selenium import webdriver
from selenium.common.exceptions import NoSuchElementException
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.support.wait import WebDriverWait


def extract_google_reviews(driver, query):
    driver.get('https://www.google.com/?hl=en')
    driver.find_element_by_name('q').send_keys(query)
    WebDriverWait(driver, 5).until(EC.element_to_be_clickable((By.NAME, 'btnK'))).click()

    reviews_header = driver.find_element_by_css_selector('div.kp-header')
    reviews_link = reviews_header.find_element_by_partial_link_text('Google reviews')
    number_of_reviews = int(reviews_link.text.split()[0])
    reviews_link.click()

    all_reviews = WebDriverWait(driver, 3).until(EC.presence_of_all_elements_located((By.CSS_SELECTOR, 'div.gws-localreviews__google-review')))
    while len(all_reviews) < number_of_reviews:
        driver.execute_script('arguments[0].scrollIntoView(true);', all_reviews[-1])
        WebDriverWait(driver, 5, 0.25).until_not(EC.presence_of_element_located((By.CSS_SELECTOR, 'div[class$="activityIndicator"]')))
        all_reviews = driver.find_elements_by_css_selector('div.gws-localreviews__google-review')

    reviews = []
    for review in all_reviews:
        try:
            full_text_element = review.find_element_by_css_selector('span.review-full-text')
        except NoSuchElementException:
            full_text_element = review.find_element_by_css_selector('span[class^="r-"]')
        reviews.append(full_text_element.get_attribute('textContent'))

    return reviews

if __name__ == '__main__':
    try:
        driver = webdriver.Firefox()
        reviews = extract_google_reviews(driver, 'STANLEY BRIDGE CYCLES AND SPORTS LIMITED')
    finally:
        driver.quit()

    print(reviews)
 类似资料:
  • 我正试图从这个链接中抓取评论: https://www.google.com/search?q=google回顾第二次机会治疗40街 对于我使用以下代码加载页面的内容 页面加载很好,它没有向下滚动,我已经对其他网站(如 linkedn)使用了相同的代码,并且它在那里工作。

  • 问题内容: 尝试使用selenium-webdriver python向下滚动到页面底部,以便加载更多产品。 该网页已加载,但没有变化。 我想念什么吗? 问题答案: 您可以尝试以下move_up和move_down函数:

  • 作为一个项目的一部分,我正试图从谷歌那里获取完整的评论(在其他网站上的之前尝试中,我的评论被一个截断,除非你点击它,否则它会隐藏完整的评论)。 我已经为此选择了rvest软件包。然而,我似乎没有得到我想要的结果。 这是我的步骤 然而,这似乎不起作用。我这里没有任何输出。 我对这个软件包和网页抓取非常陌生,所以对此的任何意见都将不胜感激。

  • X1.2新增 sp_get_comments($tag,$where); 功能: 获取评论; 参数: $tag:查询标签,默认:field:*;limit:0,5;order:createtime desc; $where:查询where数组,按照thinkphp where array格式; 返回: 数组,评论

  • 请求header GET /v1/activity/{频道id}/comments/{页码} Authorization:Bearer {ACCESS TOKEN} 注: 请将上方的{ACCESS TOKEN}替换为您的ACCESS TOKEN 请将"{频道id}"替换您需要获取的频道id `请将"{页码}"替换为要获取的页码数值,值为0将返回第一页数据,每页20条 数据为根据发送时间倒序排序,

  • 请求header GET /v1/activity/{频道id}/comments/count Authorization:Bearer {ACCESS TOKEN} 注: 请将上方的{ACCESS TOKEN}替换为您的ACCESS TOKEN 请将"{频道id}"替换您需要获取的频道id 返回 { "count": 100 } 返回参数说明 参数 描述 类型 备注 count 数目