Selenium Python如何获取引用外部JS的script标签的文本/HTML数据
解决方法
你拿不到内容的核心原因
带src属性的外部引用script标签本身不存储JS代码,所有代码都在src指向的独立外部文件中,所以读取innerHtml自然返回空值,这是HTML的标准规则,和你的Selenium代码逻辑无关。
三种可行实现方案(按易用性排序)
方案1:直接抓取「加载更多」对应的API请求(最优解)
不需要解析JS文件,直接拿结构化数据,是效率最高的方式:
- 打开浏览器F12开发者工具,切换到「网络」面板,筛选「XHR/提取」类别
- 点击页面的「加载更多」按钮,就能看到Grab前端发送的餐饮列表查询请求,返回结果是标准JSON格式,直接包含所有餐厅的经纬度、名称、评分等全量字段
- 用Python的
requests库模拟发送该请求即可,只需补全对应请求头(User-Agent、Cookie等)、请求参数(位置坐标、分页偏移量等),就能批量拉取所有餐厅数据。
方案2:Selenium直接读取页面已加载数据
如果不想处理请求构造,直接用Selenium执行JS就能拿到数据:
你点击完加载更多之后,执行以下代码获取结构化数据,不需要解析外部JS:
# 执行JS直接读取页面内置的NEXT_DATA结构化数据 next_data = driver.execute_script('return JSON.parse(document.getElementById("__NEXT_DATA__").textContent)') # 直接解析next_data中props下的餐厅列表字段即可 # 如果更新数据不在__NEXT_DATA__中,也可以遍历渲染后的餐厅DOM节点提取对应属性
方案3:读取外部JS文件内容解析
如果确实需要获取外部script的内容,按以下步骤操作:
- 先获取script标签的src属性,拼接主域名得到完整JS文件地址
script_elem = driver.find_element_by_id("__NEXT_PAGE__/restaurants") js_full_url = "https://food.grab.com" + script_elem.get_attribute("src")
- 用
requests请求该地址拿到完整JS代码文本 - 用正则匹配从JS代码中提取需要的经纬度字段即可,该方案需要写匹配规则,实现成本高于前两种。
内容的提问来源于stack exchange,提问作者RPM
相关产品推荐
相关产品推荐

