seleniumアナログ携帯ブラウザ操作clickクリック/tapタッチ要素無効の解決方法


私が直面した問題
  • ログインボタンのxpathを取得する、xpathが正しいことを保証することができる
  • .
  • ログインボタンをクリックすると、ログイン成功ページ
  • に正常にジャンプできません.
    from selenium import webdriver
    from selenium.webdriver.chrome.options import Options
    
    mobile_emulation = {"deviceName": "iPhone X"}
    options = Options()
    options.add_experimental_option("mobileEmulation", mobile_emulation)
    driver = webdriver.Chrome(chrome_options=options)
    driver.get("https://xxx.com")
    #      
    driver.find_element_by_xpath("//*[@id='email-login-input']/div/div[2]/input").send_keys("user")
    driver.find_element_by_xpath("/html/body/div/div/div[2]/div[2]/div[2]/div[4]/div/div/div[2]/input").send_keys("password")
    #      
    driver.find_element_by_xpath("/html/body/div/div/div[2]/div[2]/div[2]/button").click()
    #   ,     
    
  • ログインボタンをタッチすると、ログイン成功ページ
  • に正常にジャンプできません.
    from selenium import webdriver
    from selenium.webdriver.chrome.options import Options
    import time
    from selenium.webdriver.common.touch_actions import TouchActions
    
    mobile_emulation = {"deviceName": "iPhone X"}
    options = Options()
    options.add_experimental_option("mobileEmulation", mobile_emulation)
    driver = webdriver.Chrome(chrome_options=options)
    driver.get("https://xxx.com")
    #      
    driver.find_element_by_xpath("//*[@id='email-login-input']/div/div[2]/input").send_keys("user")
    driver.find_element_by_xpath("/html/body/div/div/div[2]/div[2]/div[2]/div[4]/div/div/div[2]/input").send_keys("password")
    #         
    Action = TouchActions(driver)
    loginButton = driver.find_element_by_xpath("/html/body/div/div/div[2]/div[2]/div[2]/button")
    Action.tap(loginButton)
    Action.perform()
    #   ,      ,             
    
  • 簡単で乱暴な方法send_keys(Keys.ENTER)を使用して、シミュレーションはリターンキーをクリックして、正常に
  • に登録することができます
    from selenium import webdriver
    from selenium.webdriver.chrome.options import Options
    import time
    from selenium.webdriver.common.keys import Keys
    
    mobile_emulation = {"deviceName": "iPhone X"}
    options = Options()
    options.add_experimental_option("mobileEmulation", mobile_emulation)
    driver = webdriver.Chrome(chrome_options=options)
    driver.get("https://xxx.com")
    #      
    driver.find_element_by_xpath("//*[@id='email-login-input']/div/div[2]/input").send_keys("user")
    driver.find_element_by_xpath("/html/body/div/div/div[2]/div[2]/div[2]/div[4]/div/div/div[2]/input").send_keys("password")
    #  “    ”, “   ”
    loginButton = driver.find_element_by_xpath("/html/body/div/div/div[2]/div[2]/div[2]/button")
    loginButton.send_keys(Keys.ENTER)
    #   “   ”  ,            ,    
    

    WebdriverのKeys()クラスは、キーボード上のすべてのキーの操作を提供します.
    from selenium.webdriver.common.keys import Keys
    #               keys   。
    #            :
    send_keys(Keys.BACK_SPACE) #   (BackSpace)
    send_keys(Keys.SPACE) #   (Space)
    send_keys(Keys.TAB) #   (Tab)
    send_keys(Keys.ESCAPE) #   (Esc)
    send_keys(Keys.ENTER) #   (Enter)
    send_keys(Keys.CONTROL,'a') #  (Ctrl+A)
    send_keys(Keys.CONTROL,'c') #  (Ctrl+C)