我想抓取一些网站。我使用selenium / PhantomJS来抓取JS(react,angular,jquery等)和python来抓取其他所有内容。
我的主要问题是我无法区分是否使用JS加载页面。
欢迎任何想法!
答案 0 :(得分:0)
页面被加载"的想法或者"完成"是一个模糊的。 一般来说,没有办法知道。 Web应用程序很复杂,任何时候都可以随时改变。
但除非您尝试构建通用网站索引器,否则谷歌可能不是您需要解决的问题。相反,您需要解决此问题。可能意识到为什么你在某个特定页面上,因此你希望 在那里。你应该能够做真正的用户所做的事情:等待一些有意义的数据出现在屏幕上,例如,页面标题或一些正文:
from selenium import webdriver
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.support.by import By
from selenium.webdriver.support.wait import WebDriverWait
driver = webdriver.Firefox()
wait = WebDriverWait(driver, 10)
driver.get("http://www.example.com")
wait.until(
EC.text_to_be_present_in_element(
(By.CSS_SELECTOR, "p"),
"to be used for illustrative examples"))
link = driver.find_element_by_partial_link_text("More information")
link.click()
wait.until(
EC.text_to_be_present_in_element(
(By.CSS_SELECTOR, "h1"),
"IANA-managed Reserved Domains"))
capybara-py实际上使这种同步非常简单和透明:
import capybara
from capybara.dsl import page
capybara.current_driver = "selenium"
page.visit("http://www.example.com")
page.assert_text("to be used for illustrative examples")
page.click_link("More information")
page.assert_text("IANA-managed Reserved Domains")