使用Selenium-BeautifulSoup爬取动态页面无法加载实际文本求助
问题描述
我正在爬取一个动态页面(该页面从数据库加载结果进行展示),但仅能获取到文本元素的占位符而非实际文本。目标页面地址为:https://www.bricklink.com/v2/search.page?q=8084#T=S
预期结果/实际结果
预期结果:
<table> <tr> <td class="pspItemClick"> <a class="pspItemNameLink" href="www.some-url.com">The Name</a> <br/> <span class="pspItemCateAndNo"> <span class="blcatList">Catalog Num</span> : 1111 </span> </td> </tr> </table
实际结果:
<table> <tr> <td class="pspItemClick"> <a class="pspItemNameLink" href="[%catalogUrl%]">[%strItemName%]</a> <br/> <span class="pspItemCateAndNo"> <span class="blcatList">[%strCategory%]</span> : [%strItemNo%] </span> </td> </tr> </table
已尝试的解决方案
- 首先尝试使用
requests库加载页面,但由于这是动态页面,该方法无效。
def load_page(url: str) -> BeautifulSoup: headers = { 'Access-Control-Allow-Origin': '*', 'Access-Control-Allow-Methods': 'GET', 'Access-Control-Allow-Headers': 'Content-Type', 'Access-Control-Max-Age': '3600', 'User-Agent': 'Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:52.0) Gecko/20100101 Firefox/52.0' } req = requests.get(url, headers=headers) return BeautifulSoup(req.content, 'html.parser')
- 之后尝试使用Selenium的
webdriver加载动态内容:
def html_source_from_webdriver(url: str, wait: int = 0) -> BeautifulSoup: browser = webdriver.Chrome(service=selenium_chrome_service, chrome_options=options) browser.implicitly_wait(wait) browser.get(urljoin(ROOT_URL, url)) page_source = browser.page_source return BeautifulSoup(page_source, features="html.parser")
两种方法得到的结果相同。尝试了0-15不同数值的implicitly_wait,均无效。还尝试了browser.set_script_timeout(<timeout>),同样没有效果。
更新
后续又尝试了以下方法,但仍未解决问题:
- 在
browser.get(...)调用后添加time.sleep() - 使用
browser.set_page_load_timeout()——本不抱期望,但仍进行了尝试
内容的提问来源于stack exchange,提问作者James B
相关产品推荐
相关产品推荐

