python - 如何模拟 Selenium 中的触摸屏?

标签 python selenium

我正在尝试创建一个机器人,这个机器人必须点击一些不能识别鼠标点击但能识别触摸的元素,我在网上搜索了一下,我找到了一种模拟触摸事件的方法。 这是我写的

from selenium import webdriver
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.common.touch_actions import TouchActions

user_agent = "Mozilla/5.0 (iPhone; U; CPU iPhone OS 3_0 like Mac OS X; en-us) AppleWebKit/528.18 (KHTML, like Gecko) Version/4.0 Mobile/7A341 Safari/528.16"
profile = webdriver.FirefoxProfile()
profile.set_preference("general.useragent.override", user_agent)
driver = webdriver.Firefox(profile)
driver.set_window_size(400, 800)

WebDriverWait(driver, 10).until(lambda d: d.find_element_by_css_selector(".qJfNm").is_displayed())
element = driver.find_element_by_css_selector(".qJfNm")
touchactions = TouchActions(driver)
touchactions.tap(element)

并没有出现错误,但它不起作用,屏幕上没有任何变化。根据文档 https://seleniumhq.github.io/selenium/docs/api/java/org/openqa/selenium/interactions/touch/TouchActions.html

tap 方法模拟鼠标点击 而不是触摸屏事件,所以我想知道是否有模拟触摸屏的方法selenium 上的事件,或者这是正确的方法,但我做错了。

我也尝试过编写 touchactions.tap(element).perform() 而不是 touchactions.tap(element)

from selenium import webdriver
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.common.touch_actions import TouchActions

user_agent = "Mozilla/5.0 (iPhone; U; CPU iPhone OS 3_0 like Mac OS X; en-us) AppleWebKit/528.18 (KHTML, like Gecko) Version/4.0 Mobile/7A341 Safari/528.16"
profile = webdriver.FirefoxProfile()
profile.set_preference("general.useragent.override", user_agent)
driver = webdriver.Firefox(profile)
driver.set_window_size(400, 800)

WebDriverWait(driver, 10).until(lambda d: d.find_element_by_css_selector(".qJfNm").is_displayed())
element = driver.find_element_by_css_selector(".qJfNm")
touchactions = TouchActions(driver)
touchactions.tap(element).perform()

但它引发了这个错误

Traceback (most recent call last):
  File "C:/Users/mcara/OneDrive/Desktop/instagram bot mobile/instagram_bot_mobile.py", line 57, in <module>
    touchactions.tap(element).perform()
  File "C:\Users\mcara\PycharmProjects\1\venv\lib\site-packages\selenium\webdriver\common\touch_actions.py", line 47, in perform
    action()
  File "C:\Users\mcara\PycharmProjects\1\venv\lib\site-packages\selenium\webdriver\common\touch_actions.py", line 57, in <lambda>
    Command.SINGLE_TAP, {'element': on_element.id}))
  File "C:\Users\mcara\PycharmProjects\1\venv\lib\site-packages\selenium\webdriver\remote\webdriver.py", line 321, in execute
    self.error_handler.check_response(response)
  File "C:\Users\mcara\PycharmProjects\1\venv\lib\site-packages\selenium\webdriver\remote\errorhandler.py", line 242, in check_response
    raise exception_class(message, screen, stacktrace)
selenium.common.exceptions.WebDriverException: Message: POST /session/71d75201-9012-46a1-9c6e-1c720dd332ce/touch/click did not match a known command

不明白为什么。

我正在使用 gekodriverpython 3windows 10

最佳答案

由于 TouchActions 已弃用,您可以使用:

from selenium.webdriver.common.actions import interaction
from selenium.webdriver.common.actions.action_builder import ActionBuilder

actions = ActionChains(driver)

# override as 'touch' pointer action
actions.w3c_actions = ActionBuilder(driver, mouse=PointerInput(interaction.POINTER_TOUCH, "touch"))
actions.w3c_actions.pointer_action.move_to_location(start_x, start_y)
actions.w3c_actions.pointer_action.pointer_down()
actions.w3c_actions.pointer_action.pause(2)
actions.w3c_actions.pointer_action.move_to_location(end_x, end_y)
actions.w3c_actions.pointer_action.release()
actions.perform()

发现于:appium-python-client

关于python - 如何模拟 Selenium 中的触摸屏?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55538724/

相关文章:

java - 在 Jenkins 中使用 GeckoDriver Firefox 通过 Selenium Maven 建立与 WindowServer 的默认连接错误

java - 尝试 - 除了在 Python 中给定的时间

python - 如何使用 Flask 将 GeoJSON 返回到 Openlayers

python - Doctest NORMALIZE_WHITESPACE 不起作用

python - Scrapy 1.0 - 从 python 脚本运行后获取返回值

c# - 重用 Selenium C# 中页面对象的属性

java - 范围报告在 Cucumber 4.7.1 中不起作用

java - 使用 maven selenium 插件启动浏览器 session 时无法删除文件

java - 获取表大小时如何排除表的第一行和最后一行

python - linux crontab 不能运行带图形界面的程序?