2016-11-22 52 views
2

我需要在网页上滚动以取消某些文本,因为当用户滚动浏览网站(类似于Facebook或Twitter)时,文本会动态加载。用python,seleniumFirefox(只有几行代码)滚动很简单,但是相同的代码在phantomJS中不起作用。Python Selenium在滚动Firefox和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相同的结果?

回答

0

首先 PhantomJS的截图功能拍摄整个网页的图片。如果您的屏幕高度(Phantom案例中的窗口大小)仅为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请求了很多东西。

好要牢记: -如果您正在测试与幻影web应用程序,尝试在本地服务的资产,而不是从CDN。这可以让你免受很多痛苦,因为大部分因素都在你的掌控之中。

相关问题