榴莲味的草莓熊 2023-02-27 13:41 采纳率: 100%
浏览 42
已结题

Selenium键盘Ctrl+v操作调试成功但正式运行不成功

python中Selenium键盘Ctrl+v操作,调试的时候可以成功实现,但正式运行的时候不成功
python源代码如下

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver import ActionChains
# 导入时间包
from time import sleep
# 导入Keys包(键盘控制)
from selenium.webdriver.common.keys import Keys

driver = webdriver.Chrome()
driver.get('https://www.csdn.net/')
# driver.get('https://blog.csdn.net/YON_dog')
sleep(1)

# 定位'会员中心'栏  find(找到)  element(移动)
collect = driver.find_element(By.XPATH,'//*[@id="csdn-toolbar"]/div/div/div[3]/div/div[2]/a')
# 悬浮至'会员中心'标签处   move(移动)             perform(执行)
ActionChains(driver).move_to_element(collect).perform()
sleep(1)

# 定位文本框并输入文本                                send(发送)  key(键)
driver.find_element(By.ID,'toolbar-search-input').send_keys('YON_dogs')
sleep(1)
# 模拟回车键进行跳转(输入内容后)                                      ENTER(输入)
driver.find_element(By.ID,'toolbar-search-button').send_keys(Keys.ENTER)
sleep(1)

# 此时会打开一个新的页面,但代码并没有切换到最新页面中,所以标签定位会定位不到
# 获取打开的多个窗口句柄    handles(处理)
windows = driver.window_handles
# 切换到当前最新打开的窗口   switch(开关)
driver.switch_to.window(windows[-1])
sleep(1)

# 使用Backspace来删除一个字符                                       BACK_SPACE(退格)
driver.find_element(By.XPATH,'//*[@id="keyword"]').send_keys(Keys.BACK_SPACE)
sleep(1)
# Ctrl+A 全选输入框中的内容                                         CONTROL(控制)
driver.find_element(By.XPATH,'//*[@id="keyword"]').send_keys(Keys.CONTROL,'a')
sleep(1)
# Ctrl+C 复制输入框中的内容
driver.find_element(By.XPATH,'//*[@id="keyword"]').send_keys(Keys.CONTROL,'c')
sleep(1)
# Ctrl+V 粘贴输入框中的内容
driver.find_element(By.XPATH,'//*[@id="keyword"]').send_keys(Keys.CONTROL,'v')
sleep(1)
# 回车键
driver.find_element(By.XPATH,'//*[@id="keyword"]').send_keys(Keys.ENTER)

下面是调试截图

img

img

页面是能显示粘贴成功的,并且回车再次搜索时是以粘贴之后的内容进行搜索的

img

但在正式页面粘贴不成功,回车再次搜索时也是以粘贴之前的内容进行搜索

img

请问这是为什么呢?应该怎么解决呢?

  • 写回答

2条回答 默认 最新

  • MarkHan_ 2023-02-27 14:24
    关注

    该回答引用GPTᴼᴾᴱᴺᴬᴵ
    这可能是因为在实际运行时,Selenium有时候无法正确地获取当前浏览器窗口的焦点,因此Ctrl + v操作可能不起作用。为了解决这个问题,你可以尝试使用ActionChains类的send_keys_to_element()方法,该方法可以发送一系列按键操作,包括Ctrl + v。以下是一个可能的解决方案:

    from selenium.webdriver.common.action_chains import ActionChains
    
    # 定位输入框
    input_box = driver.find_element(By.XPATH,'//*[@id="keyword"]')
    
    # 复制内容
    input_box.send_keys(Keys.CONTROL, 'a')
    input_box.send_keys(Keys.CONTROL, 'c')
    
    # 粘贴内容
    ActionChains(driver).move_to_element(input_box).click().key_down(Keys.CONTROL).send_keys('v').key_up(Keys.CONTROL).perform()
    
    # 回车
    input_box.send_keys(Keys.ENTER)
    
    
    

    这个解决方案将使用ActionChains类模拟粘贴操作。首先,使用send_keys()方法将内容复制到剪贴板。然后,使用move_to_element()方法将鼠标移动到输入框上,并使用click()方法单击输入框以确保它已获取焦点。接下来,使用key_down()方法按下Ctrl键,然后使用send_keys()方法发送字符'v',最后使用key_up()方法释放Ctrl键。最后,使用send_keys()方法发送回车键。这应该可以正确地执行Ctrl + v操作。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 2月28日
  • 已采纳回答 2月27日
  • 创建了问题 2月27日

悬赏问题

  • ¥50 三种调度算法报错 有实例
  • ¥15 关于#python#的问题,请各位专家解答!
  • ¥200 询问:python实现大地主题正反算的程序设计,有偿
  • ¥15 smptlib使用465端口发送邮件失败
  • ¥200 总是报错,能帮助用python实现程序实现高斯正反算吗?有偿
  • ¥15 对于squad数据集的基于bert模型的微调
  • ¥15 为什么我运行这个网络会出现以下报错?CRNN神经网络
  • ¥20 steam下载游戏占用内存
  • ¥15 CST保存项目时失败
  • ¥20 java在应用程序里获取不到扬声器设备