想用Selenium刮擦但网页认为我是机器人

问题描述 投票:0回答:2

想用 Selenium 进行抓取,但网页(Cloudflare)认为我是机器人。

我尝试添加

options
,无头,等待特定的
id
出现,但网页永远不会完全加载。

如何绕过这个?

仅供参考,只是为了一个学术项目,而不是试图做任何邪恶的事情。

def get_reviews(url):
    driver = webdriver.Chrome(options=options)
    try:
        driver.get(url)
        wait = WebDriverWait(driver, 30)
        wait.until(EC.presence_of_element_located((By.CSS_SELECTOR, "carousel-module--container--27wzs")))
        sleep(3)

        response_text = driver.page_source
        soup = BeautifulSoup(response_text, 'html.parser')
        udemy_body = soup.find('body', {'id': 'udemy'})

        if udemy_body:
            # Get the structure!
            # print(udemy_body.prettify())
            review_spans = udemy_body.find_all('span', class_='ud-text-md review--review-content-with-modal-trigger--vsRaS')
            reviews = [review_span.get_text(strip=True) for review_span in review_spans]
            print(reviews)
        else:
            logger.warning(f"Body element with id 'udemy' not found for {url}.")

    except Exception as e:
        logger.error(f"An error occurred for {url}: {e}")

    finally:
        driver.quit()

udemy_course_url = 'https://www.udemy.com/course/deep-learning-tensorflow-2/'
get_reviews(udemy_course_url)

我正在测试的选项包括:

options = Options()
options.add_argument("--window-size=1920,1080")

options.add_argument("user-agent=Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/100.0.4896.127 Safari/537.36")

# options.add_argument("--headless")

options.add_argument("--disable-gpu")

options.add_argument("--ignore-certificate-errors")

options.add_experimental_option("excludeSwitches", ["enable-automation"])
options.add_experimental_option('useAutomationExtension', False)
selenium-webdriver web-scraping beautifulsoup selenium-chromedriver
2个回答
2
投票

Udemy 使用机器人检测软件。诸如 https://github.com/seleniumbase/SeleniumBase 之类的框架可以使机器人看起来像人类。 SeleniumBase 为此使用 UC 模式

pip install seleniumbase
之后,使用
python
运行以下脚本:

from seleniumbase import Driver

driver = Driver(uc=True)
driver.get("https://www.udemy.com/course/deep-learning-tensorflow-2/")
driver.uc_click('button[data-purpose*="show-reviews"] span')

breakpoint()

driver.quit()

该脚本调用

breakpoint()
将其暂停在 Tensorflow 课程的评论/评级部分。 (准备好后,在控制台中键入
c
并按 ENTER 键从断点继续。)

breakpoint()
替换为脚本的其余部分以获取评论。


0
投票

哇,我已经在谷歌上搜索了一段时间,所有指向设置 Chrome 选项的答案都失败了 - 这些答案已经有 2 年多了,所以这是可以理解的。尝试了seleniumbase,不敢相信它只用

pip install seleniumbase
就解决了它!

© www.soinside.com 2019 - 2024. All rights reserved.