我需要在网页上滚动以废弃一些文本,因为当用户滚动网站时(类似于facebook或twitter),文本会动态加载。使用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 :(得分: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
请记住:如果您正在使用Phantom测试网络应用,请尝试在本地提供资源,而不是从CDN提供。这样可以避免很多痛苦,因为大多数因素都在您的掌控之中。