Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/security/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Firefox和PhantomJS在scroll中的差异_Python_Selenium_Phantomjs - Fatal编程技术网

Python Firefox和PhantomJS在scroll中的差异

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

我需要在网页上滚动来删除一些文本,因为当用户在网站上滚动时,文本是动态加载的(类似于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相同的结果?

首先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为资产提供服务。这将使你免于很多痛苦,因为大多数因素都在你的控制之下