【问题标题】:Makes Selenium not wait till full load of page使 Selenium 不等到页面完全加载
【发布时间】:2016-12-05 10:28:14
【问题描述】:

我正在尝试将selenium 用于带有chromedriver 的此类页面: http://shironet.mako.co.il/artist?type=lyrics&lang=1&prfid=202&wrkid=2473

问题是Selenium 总是等到页面完成加载(例如那里的youtube 播放器)。 我只对html 来源感兴趣,所以我不想等这么久。 我怎样才能让我的程序不等待?我正在使用python。 (我使用selenium 因为urllib 不适用于该网站)

【问题讨论】:

  • 你用什么代码打开网页。一般 driver.get() 方法等到页面加载完毕
  • 嗨,我使用的是:driver.get(url),然后是 driver.page_source。但我不想等到页面加载..我只想要源代码

标签: python selenium


【解决方案1】:

可能的解决方案很少:

1)由于您没有澄清urllib didnt work for this website 的意思,您可以尝试使用python-requests 库代替:

使用pip install requestscmd/Terminal

url = "http://shironet.mako.co.il/artist?type=lyrics&lang=1&prfid=202&wrkid=2473"
page_source = requests.get(url).content

2) 尝试使用Firefox Preferences 禁用媒体文件自动播放:

from selenium.webdriver.firefox.firefox_profile import FirefoxProfile

profile.set_preference("media.autoplay.enabled", False);
driver = webdriver.Firefox(profile)

3) 更粗鲁的方法是在页面上禁用 Javascript(我不确定您是否真的需要此功能用于所述目的)

from selenium.webdriver.firefox.firefox_profile import FirefoxProfile

profile.set_preference("javascript.enabled", False);
driver = webdriver.Firefox(profile)

但要小心,因为它会从页面源中删除一些必需的媒体文件

【讨论】:

    【解决方案2】:

    如果您只想要源代码,那么您实际上不需要 Selenium 所做的任何事情,因此 Selenium 只会妨碍您。使用 selenium 抓取 URL,然后执行简单的 HTTP GET(例如使用 curl 或 wget,或编程语言中的任何内置函数,例如 urllib2 或 Python 中的 requests 库)

    如果您仍想对 HTML 进行一些复杂的解析,请查看 BeautifulSoup 或 LXML。

    【讨论】:

    • 我希望这个简单的 http get 请求能够正常工作,但这并不是因为我认为该网站受到了一些 javascripts 的保护。 stackoverflow.com/questions/40710396/…
    • 使用身份验证保护?还是防止刮擦?如果它受到保护免于刮擦,您应该等到它完全加载。这样你就可以确定正在发生的任何加扰都已解决 -> 使用 Selenium,等待页面加载,查看源代码。旁注:您可以在驱动程序设置中禁用某些插件。例如,我经常使用preferences.put("plugins.plugins_disabled", new String[]{ "Adobe Flash Player", "Chrome PDF Viewer"});。大多数驱动程序和大多数语言都存在类似的东西。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-08-04
    • 1970-01-01
    • 2019-03-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多