在网页抓取场景中,经常需要在网页上定位元素动态地。为了克服 BeautifulSoup 在处理动态内容方面的局限性,可以集成 Selenium,以便在抓取之前等待元素通过 JavaScript 加载。
考虑以下 Python 代码:
element = WebDriverWait(driver, 100).until(EC.presence_of_element_located((By.class, "ng-binding ng-scope")))
在此这行代码的目的是为元素标识指定一个类名。但是,由于 By.class 参数中存在多个类名,可能会发生错误。 Selenium 不支持通过 By.class 传递多个类名。
要解决此问题,请考虑以下建议:
CSS_SELECTOR:
element = WebDriverWait(driver, 20).until(EC.visibility_of_element_located((By.CSS_SELECTOR, ".ng-binding.ng-scope#tabla_evolucion")))
XPATH:
element = WebDriverWait(driver, 20).until(EC.visibility_of_element_located((By.XPATH, "//*[@class='ng-binding ng-scope' and @id='tabla_evolucion']")))
通过合并这些修改,您可以有效地定位通过 JavaScript 动态加载的网页上的元素,从而实现成功的网页刮擦。
以上是如何使用 Selenium 和 Python 高效定位具有多个类名的 Web 元素?的详细内容。更多信息请关注PHP中文网其他相关文章!