前言
chrome手機wap模式登錄淘寶頁面,點擊驗證碼無效問題解決。
切換到wap模式,使用TouchActions模塊用tap方法觸摸
我的環境
- chrome 62
- chromedriver 2.33
遇到問題
1.登錄手機版淘寶時候,驗證碼無法通過點擊事件觸發
[wap版淘寶](https://login.m.taobao.com/msg_login.htm?spm=0.0.0.0)
F12手機模式
1.按f12,點下圖按鈕(Toggle device toolbar)切換成手機模式
2.切換成手機模式后發現輸入手機號后,手動操作是可以觸發驗證碼的
chrome設置手機模式
1.添加Options配置,設置成手機模式訪問
# coding:utf-8
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
url = "https://login.m.taobao.com/msg_login.htm?spm=0.0.0.0"
mobile_emulation = {"deviceName":"iPhone 6"}
options = Options()
options.add_experimental_option("mobileEmulation", mobile_emulation)
driver = webdriver.Chrome(chrome_options=options)
driver.get(url)
2.這里的deviceName點開設備選項,選擇一個手機設備名稱
TouchActions
1.這里輸入手機號后,用click點‘獲取驗證碼’是無效的,這時候需要換個思維,用TouchActions里面的tap觸摸方式去觸發‘獲取驗證碼’按鈕
2.TouchAction里面的幾個用法
class TouchAction(object):
def __init__(self, driver=None):
self._driver = driver
self._actions = []
def tap(self, element=None, x=None, y=None, count=1):
模擬手指觸摸屏
def press(self, el=None, x=None, y=None):
短按:模擬手指按住一個元素,或者坐標
def long_press(self, el=None, x=None, y=None, duration=1000):
長按:模擬按住一個元素,或者坐標
def wait(self, ms=0):
按住元素后的等待時間
def move_to(self, el=None, x=None, y=None):
移動手指到另外一個元素,或者坐標,注意這里坐標不是絕對坐標,是偏移量
def release(self):
釋放手指
def perform(self):
執行前面的動作
參考代碼
# coding:utf-8
from selenium import webdriver
from selenium.webdriver.common.touch_actions import TouchActions
from selenium.webdriver.chrome.options import Options
url = "https://login.m.taobao.com/msg_login.htm?spm=0.0.0.0"
# 設置成手機模式
mobile_emulation = {"deviceName":"iPhone 6"}
options = Options()
options.add_experimental_option("mobileEmulation", mobile_emulation)
driver = webdriver.Chrome(chrome_options=options)
driver.get(url)
driver.find_element_by_id("username").send_keys("yoyoketang")
# 觸摸事件
el = driver.find_element_by_id('getCheckcode')
TouchActions(driver).tap(el).perform()
seleniumQQ群:646645429