关于如何利用selenium拉起android端chrome浏览器,可以参考谷歌文档
https://sites.google.com/a/chromium.org/chromedriver/getting-started/getting-started---android
import time
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.common.action_chains import ActionChains
# pc端chrome模拟手机设备
def get_pc_driver():
mobile_emulation = {"deviceName": "Google Nexus 5"}
chrome_options = Options()
chrome_options.add_experimental_option("mobileEmulation", mobile_emulation)
driver = webdriver.Chrome(chrome_options=chrome_options)
driver.get("http://m.iqiyi.com/v_19rremvmak.html")
time.sleep(5)
return driver
# 拉起android的chrome
def get_driver():
capabilities = {'chromeOptions': {'androidPackage': 'com.android.chrome'}}
driver = webdriver.Remote('http://localhost:9515', capabilities)
driver.get("http://m.iqiyi.com/v_19rremvmak.html")
return driver
拿到driver后,大多数操作其实跟pc是一样的,但有一些会遇到问题,下面总结一下,方便以后查询
遇到的问题
获取元素的x,y坐标和元素大小
>>>driver=get_driver()
>>>driver.get("http://m.iqiyi.com/v_19rremvmak.html")
>>>seek_btn = driver.find_element_by_class_name('progress-load')
>>>seek_btn.location
{'x': 89, 'y': 262}
>>>seek_btn.size
{'height': 2, 'width': 182}
如何点击固定坐标位置
我遇到的场景是,我打开了一个视频播放页,需要拖动进度条,改变当前的视频进度,尝试过如下办法。
action_chains文档:
http://blog.csdn.net/huilan_same/article/details/52305176
touch_actions文档:https://seleniumhq.github.io/selenium/docs/api/py/webdriver/selenium.webdriver.common.touch_actions.html
# PC可以拖动的方法有
from selenium.webdriver.common.action_chains import ActionChains
driver=get_driver()
# 方法一,seek_btn右侧的位置140px处,点击
ActionChains(driver).move_to_element_with_offset(seek_btn,140,0).click().perform()
# 方法二,拖动seek_btn到坐标(330,258)
# 注意坐标是目标位置的绝对坐标,比如水平拖动,yoffset并不是0.
ActionChains(driver).drag_and_drop_by_offset(seek_btn,330,258).perform()
# 方法三,无效,不知道为什么,按理应该也可以的。将鼠标移动到坐标(330,258),然后点击。
ActionChains(driver).move_by_offset(330,258).click().perform()
# 利用touch_actions,
# 注意每次perform后,都要重新赋值tactions,不然速度永远是第一次设置的速度,速度太快也不行
tactions = TouchActions(driver)
tactions.flick_element(b,100,0,1000).perform()