Python Firefox和PhantomJS在scroll中的差异
我需要在网页上滚动来删除一些文本,因为当用户在网站上滚动时,文本是动态加载的(类似于facebook或twitter)。使用Python Firefox和PhantomJS在scroll中的差异,python,selenium,phantomjs,Python,Selenium,Phantomjs,我需要在网页上滚动来删除一些文本,因为当用户在网站上滚动时,文本是动态加载的(类似于facebook或twitter)。使用python、selenium和Firefox(只是几行代码)滚动非常简单,但是相同的代码在phantomJS中不起作用 我想问题是我不能用phantomJS设置窗口大小。这是我的测试代码: driver = webdriver.Firefox() driver.get('https://su.org/') print(driver.get_window_size(), d
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的屏幕截图功能拍摄整个网页的图片。如果您的屏幕高度(幻影的窗口大小)只有500px,但网站的高度是1000px,那么屏幕快照的高度将是1000px。因此,dirver.get\u window\u size()
和屏幕截图尺寸的差异可能就是由于这个原因。我不知道Firefox是否也是如此
帮助您调试的一些指针:-
- 许多内容交付网络都阻止了PhantomJS。他们可以识别您使用的是无头浏览器。他们假设您有恶意意图,因此不提供CSS或JS资产,您会得到一个空白页面
- PhantomJS尚未完全支持ECMA6脚本(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
- 尝试其他internet连接或使用代理。很可能您已经从特定CDN请求了很多内容
请记住:如果您正在使用Phantom测试web应用程序,请尝试在本地而不是从CDN为资产提供服务。这将使你免于很多痛苦,因为大多数因素都在你的控制之下