Python Selenium在滚动Firefox和PhantomJS之间的区别
我需要在网页上滚动以取消某些文本,因为当用户滚动浏览网站(类似于Facebook或Twitter)时,文本会动态加载。用python
,selenium
和Firefox
(只有几行代码)滚动很简单,但是相同的代码在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
相同的结果?
首先 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。这可以让你免受很多痛苦,因为大部分因素都在你的掌控之中。