如何用Python高效触发网页多个JavaScript事件?Glassdoor爬取优化
高效获取Glassdoor「Advice to Management」内容的方案
针对你爬取Glassdoor评论时遇到的「Continue Reading」按钮加载问题,以下是几个比原生Selenium更高效的解决方案:
方案一:直接调用Glassdoor的异步接口(最快)
点击「Continue Reading」本质是触发前端调用后端接口获取完整内容,不需要启动浏览器渲染页面,直接抓包模拟请求即可:
- 打开浏览器开发者工具(F12),切换到「Network」标签;
- 点击页面上的「Continue Reading」按钮,找到新增的XHR请求(通常是POST方法,URL包含类似
/reviews/advice或/expandedContent的路径); - 记录请求的URL、请求头(Cookie、User-Agent、Referer等)、请求参数(比如评论ID、公司ID);
- 用
requests或grequests批量发送请求,获取完整的「Advice to Management」内容。
示例代码:
import requests headers = { 'User-Agent': '你的浏览器User-Agent', 'Cookie': '你的Glassdoor登录Cookie', 'Referer': 'https://www.glassdoor.com/Reviews/Alteryx-Reviews-E351220.htm' } # 假设抓包得到的接口URL和参数 api_url = 'https://www.glassdoor.com/api/reviews/getExpandedAdvice' params = { 'reviewId': '71858088', # 对应评论的ID,可从页面HTML中提取 'companyId': '351220' } response = requests.get(api_url, headers=headers, params=params) full_advice = response.json().get('adviceContent')
方案二:优化Selenium配置提速
如果必须用浏览器渲染,通过以下配置大幅减少页面加载时间:
- 启用无头模式,不显示浏览器窗口;
- 禁用图片、CSS、非必要JS加载;
- 用显式等待批量处理所有按钮。
示例代码:
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 selenium.webdriver.chrome.options import Options # 配置Chrome选项 chrome_options = Options() chrome_options.add_argument('--headless=new') # 无头模式 chrome_options.add_argument('--disable-images') # 禁用图片加载 chrome_options.add_argument('--disable-css') # 禁用CSS渲染 chrome_options.add_argument('--blink-settings=imagesEnabled=false') chrome_options.add_argument('--no-sandbox') chrome_options.add_argument('--disable-dev-shm-usage') driver = webdriver.Chrome(options=chrome_options) driver.get("https://www.glassdoor.com/Reviews/Alteryx-Reviews-E351220.htm") # 等待所有「Continue Reading」按钮加载完成,然后批量点击 wait = WebDriverWait(driver, 10) buttons = wait.until(EC.presence_of_all_elements_located((By.CLASS_NAME, "v2__EIReviewDetailsV2__continueReading"))) for btn in buttons: try: driver.execute_script("arguments[0].click();", btn) except Exception as e: # 跳过不可点击的按钮(比如已经展开的) continue # 此时页面已展开所有内容,提取HTML给BeautifulSoup处理 page_source = driver.page_source driver.quit()
方案三:用Playwright替代Selenium(更高效的浏览器自动化)
Playwright的无头模式性能优于Selenium,支持自动等待元素,API更简洁,适合批量处理:
from playwright.sync_api import sync_playwright with sync_playwright() as p: browser = p.chromium.launch(headless=True) page = browser.new_page() page.goto("https://www.glassdoor.com/Reviews/Alteryx-Reviews-E351220.htm") # 批量点击所有「Continue Reading」按钮 page.locator(".v2__EIReviewDetailsV2__continueReading").click_all() # 获取页面源码 page_source = page.content() browser.close()
注意:Glassdoor有反爬机制,不管用哪种方案,都需要合理设置请求间隔、使用代理、保持Cookie有效,避免被封禁。
内容的提问来源于stack exchange,提问作者Dunc
相关产品推荐
相关产品推荐

