Ubuntu 和 Mac 之间的 PhantomJS 不一致,Google map 在 Ubuntu 上识别为触摸设备
我最近偶然发现操作系统之间的 PhantomJS 看起来不一致。
我正在使用 Python 2.7 Selenium 模块 (2.42.1) 和 PhantomJS (1.9.7) 来测试网站应用程序。在使用 Google Maps JS API 3 测试网页时,我注意到 Google map 似乎在 Ubuntu 上将 PhantomJS 识别为触摸设备,但奇怪的是在 Mac 上却不能。
我整理了一个简单的Google Maps JavaScript API v3 Example .
所发生的情况是,缩放控制按钮在 iOS 或 Android 设备等触摸设备上看起来有所不同,它们更大并且位于左下角。
运行以下 python 脚本
# -*- coding: utf-8 -*-
from selenium import webdriver
import os, time
browser = webdriver.PhantomJS(service_log_path=os.path.devnull)
browser.set_window_size(1280, 800)
browser.get("https://notendur.hi.is/~sfg6/google_maps_example/")
time.sleep(5)
browser.save_screenshot('test_google_maps_api_screenshot.png')
给我this result on mac但是this result on ubuntu .
我可以以任何方式阻止 PhantomJS 被注册为触摸设备吗?
<小时/>答案:
正如 Jeff Sisson 在下面的回答中所建议的,问题在于用户代理字符串。
PhantomJS 在 Ubuntu 上使用了以下用户代理字符串:
Mozilla/5.0 (Unknown; Linux x86_64) AppleWebKit/534.34 (KHTML, like Gecko) PhantomJS/1.9.7 Safari/534.34
Mac 上的这个:
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_7_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/36.0.1985.125 Safari/537.36
尝试后checking几件事后我得出的结论是问题出在平台 token 上。将 Unknown
更改为 X11
(如下例所示)后,Google map 停止将 PhantomJS 视为移动设备。
# -*- coding: utf-8 -*-
from selenium import webdriver
from selenium.webdriver.common.desired_capabilities import DesiredCapabilities
import os, time
dcap = dict(DesiredCapabilities.PHANTOMJS)
dcap["phantomjs.page.settings.userAgent"] = (
"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/534.34 "
"(KHTML, like Gecko) PhantomJS/1.9.7 Safari/534.34"
)
browser = webdriver.PhantomJS(desired_capabilities=dcap,service_log_path=os.path.devnull)
browser.set_window_size(1280, 800)
browser.get("https://notendur.hi.is/~sfg6/google_maps_example/")
time.sleep(5)
browser.save_screenshot('test_google_maps_api_screenshot_x11.png')
在 Ubuntu 上运行上面的 python 脚本给出 this result .
最佳答案
您是否尝试过手动设置 PhantomJS 的用户代理?有趣的是(在 Mac 上使用 Safari),当我将用户代理设置为 iPhone 时,您的测试页面会加载移动 UI,因此这可能是一个不正确的浏览器嗅探的简单情况。
以下是如何使用 page.settings
设置用户代理的示例:https://github.com/ariya/phantomjs/blob/master/examples/useragent.js
此示例还将记录默认用户代理是什么 - 以及 mailing list evidence似乎暗示用户代理在不同操作系统之间肯定有所不同。
关于python - 为什么 Ubuntu 上的 PhantomJS 会被 Google map 注册为触摸设备?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24956212/