在selenium中使用移动浏览器而不模拟设备?

时间:2018-03-31 13:22:39

标签: python selenium mobile browser

我尝试使用selenium在python中编写脚本,它应该自动将图像上传到图像平台。但问题是,当您使用移动浏览器(例如iPhone上的Safari)时,仅提供上传图片的功能。在一项快速研究中,我发现selenium支持这一点,但据我所知,这仅在您模拟设备或连接计算机上的真实设备时才会给出。如果您想使用python模拟移动浏览器,是否有另一种方式(甚至可能是另一个库?)没有这样的开销(连接或模拟设备)?

2 个答案:

答案 0 :(得分:5)

传递正确的用户代理应该可以解决问题。移动Chrome的示例:

from selenium import webdriver
from selenium.webdriver.chrome.options import Options

chrome_options = Options()
chrome_options.add_argument('--user-agent=Mozilla/5.0 (iPhone; CPU iPhone OS 10_3 like Mac OS X) AppleWebKit/602.1.50 (KHTML, like Gecko) CriOS/56.0.2924.75 Mobile/14E5239e Safari/602.1')
driver = webdriver.Chrome(chrome_options=chrome_options)
driver.get('https://www.google.com')

答案 1 :(得分:0)

enter image description here

指定已知的移动设备

要使用特定设备名称启用“移动仿真”,“ mobileEmulation”词典必须包含“ deviceName”。使用“ DevTools仿真”面板中的有效设备名称作为“ deviceName”的值。


from selenium import webdriver
mobile_emulation = { "deviceName": "Nexus 5" }
chrome_options = webdriver.ChromeOptions()
chrome_options.add_experimental_option("mobileEmulation", mobile_emulation)
driver = webdriver.Remote(command_executor='http://127.0.0.1:4444/wd/hub',desired_capabilities = chrome_options.to_capabilities())

指定单个设备属性

还可以通过指定各个属性来启用“移动仿真”。为了以这种方式启用移动仿真,“ mobileEmulation”字典可以包含“ deviceMetrics”字典和“ userAgent”字符串。必须在“ deviceMetrics”字典中指定以下设备指标:

  • “宽度”-设备屏幕的宽度(以像素为单位)
  • “高度”-设备屏幕的高度(以像素为单位)
  • “ pixelRatio”-设备的像素比例
  • “触摸”-是否模拟触摸事件(默认为true,通常 不需要设置)
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
mobile_emulation = {
    "deviceMetrics": { "width": 360, "height": 640, "pixelRatio": 3.0 },
    "userAgent": "Mozilla/5.0 (Linux; Android 4.2.1; en-us; Nexus 5 Build/JOP40D) AppleWebKit/535.19 (KHTML, like Gecko) Chrome/18.0.1025.166 Mobile Safari/535.19" }
chrome_options = Options()
chrome_options.add_experimental_option("mobileEmulation", mobile_emulation)
driver = webdriver.Chrome(chrome_options = chrome_options)