Firefox中的Python Selenium与Spntom中的PhantomJS有所不同

时间:2016-11-22 22:43:49

标签: python selenium phantomjs

我需要在网页上滚动以废弃一些文本,因为当用户滚动网站时(类似于facebook或twitter),文本会动态加载。使用pythonseleniumFirefox(只有几行代码)滚动非常简单,但相同的代码在phantomJS中无效。

我认为问题是我无法使用phantomJS设置窗口大小。这是我的测试代码:

driver = webdriver.Firefox()
driver.get('https://su.org/')
print(driver.get_window_size(), driver.get_window_position())
driver.save_screenshot('imgs/firefox.png')
driver.quit()
>>> {'width': 1024, 'value': None, 'height': 555} {'value': None, 'x': 336, 'y': 28}

driver = webdriver.PhantomJS()
driver.get('https://su.org/')
driver.set_window_size(width=1024, height=555)
print(driver.get_window_size(), driver.get_window_position())
driver.save_screenshot('imgs/phantom2.png')
driver.quit()
>>> {'width': 1024, 'height': 555} {'x': 0, 'y': 0}

第二个代码确实打印了正确的大小,但如果您看到保存屏幕截图,则第二个图像的大小是错误的。 PhantomJS将所有网站放在窗口中,我可以滚动。如何获得与Firefox相同的结果?

1 个答案:

答案 0 :(得分:0)

首先 PhantomJS的截图功能可以拍摄整个网页。如果您的屏幕高度(幻影的窗口大小)仅为500px但网站的高度为1000px,则屏幕截图的高度将为1000px。因此,dirver.get_window_size()screenshot dimensions之间的差异可能是由此造成的。我不知道Firefox是否也是如此。

一些帮助您调试的指针: -

  • 许多内容分发网络已阻止PhantomJS。他们可以确定您使用的是无头浏览器。他们认为你有恶意,因此不提供CSS或JS资产,你会得到一个空白页。

  • PhantomJS尚未完全支持ECMA 6脚本(2016年11月24日)。所以我注意到有些东西可以在Firefox上运行,但它们会在PhantomJS中发出错误。

  • 阅读PhantomJS浏览器日志。它们包含错误,警告等,这将有助于调试问题。 (如果你也可以在这里发布内容,那将会很有帮助)

  • 使用time.sleep(3)为网站提供一些时间来加载动态内容。

  • 模拟真实的浏览器。更改UserAgent字符串以匹配真实的浏览器。下面给出的片段。

代码: -

from selenium import webdriver
from selenium.webdriver.common.desired_capabilities import DesiredCapabilities

dcap = dict(DesiredCapabilities.PHANTOMJS)
dcap["phantomjs.page.settings.userAgent"] = ("Mozilla/5.0 (Macintosh; Intel Mac OS X 10_8_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/29.0.1547.57 Safari/537.36")

driver = webdriver.PhantomJS(desired_capabilities=dcap)
# code to visit and perform actions 
  • 尝试使用其他互联网连接或使用代理。有可能你已经从特定的CDN请求了很多东西。

请记住:如果您正在使用Phantom测试网络应用,请尝试在本地提供资源,而不是从CDN提供。这样可以避免很多痛苦,因为大多数因素都在您的掌控之中。