鱼C论坛

 找回密码
 立即注册
查看: 1811|回复: 3

[已解决]使用selenium模拟点击后切换到新窗口

[复制链接]
发表于 2023-8-26 17:44:08 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
就是使用selenium模拟点击后切换到新窗口,我用了方法a.click()模拟点击了登录淘宝的界面,但是程序报错了,我注释了这2行代码,然后程序就能运行了,可以点击登录那个按钮,请问如何切换到那个登录后的输入用户名和密码的网页界面呢?



代码如下:
import time

from selenium import webdriver
from selenium.webdriver.common.by import By

browser = webdriver.Edge()
browser.get("https://www.taobao.com/")
a = browser.find_element(By.XPATH,"//div[@class='member-logout J_UserMemberLogout']/a[@class='btn-login ml1 tb-bg weight']")
a.click()

# b = browser.find_element(By.ID,"fm-login-id")
# b.send_keys("11111111111")

time.sleep(999)

注释了2行代码  然后程序就能运行了,但是不注释程序就报错了。
最佳答案
2023-8-26 17:44:27
根据您提供的代码,您想要使用Selenium模拟点击登录按钮后切换到登录界面,并输入用户名和密码。您已经找到了登录按钮的元素对象,并使用click()方法模拟点击,但是在查找用户名输入框和输入用户名的代码处出现了问题。

根据您提供的代码,可以尝试以下修改:
import time
from selenium import webdriver
from selenium.webdriver.common.by import By

browser = webdriver.Edge()
browser.get("https://www.taobao.com/")

# 使用CSS选择器定位登录按钮并模拟点击
a = browser.find_element(By.CSS_SELECTOR, "div.member-logout.J_UserMemberLogout a.btn-login.ml1.tb-bg.weight")
a.click()

# 切换到新打开的窗口
handles = browser.window_handles
browser.switch_to.window(handles[-1])

# 在新窗口中查找并输入用户名
b = browser.find_element(By.ID, "fm-login-id")
b.send_keys("11111111111")

time.sleep(999)

上述代码做了以下更改:

1. 使用CSS选择器div.member-logout.J_UserMemberLogout a.btn-login.ml1.tb-bg.weight来定位登录按钮。
2. 使用window_handles获取所有窗口的句柄(handle)列表,并通过switch_to.window()切换到最后一个窗口(即新打开的窗口)。
3. 在新窗口中使用By.ID定位用户名输入框,并输入用户名。

请注意,使用Selenium进行网页操作时,可能会有一些异步加载或页面渲染延迟的情况,因此在进行元素查找和操作时,最好加入适当的等待,以确保元素已完全加载和可见。您可以使用time.sleep()方法简单地添加固定的等待时间,但更好的方式是使用WebDriverWait结合条件等待,以提高代码的稳定性和灵活性。

希望这能帮助到您!如果您有更多问题,请随时提问。
如果问题已经解决,请设置最佳答案
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-8-26 17:44:27 | 显示全部楼层    本楼为最佳答案   
根据您提供的代码,您想要使用Selenium模拟点击登录按钮后切换到登录界面,并输入用户名和密码。您已经找到了登录按钮的元素对象,并使用click()方法模拟点击,但是在查找用户名输入框和输入用户名的代码处出现了问题。

根据您提供的代码,可以尝试以下修改:
import time
from selenium import webdriver
from selenium.webdriver.common.by import By

browser = webdriver.Edge()
browser.get("https://www.taobao.com/")

# 使用CSS选择器定位登录按钮并模拟点击
a = browser.find_element(By.CSS_SELECTOR, "div.member-logout.J_UserMemberLogout a.btn-login.ml1.tb-bg.weight")
a.click()

# 切换到新打开的窗口
handles = browser.window_handles
browser.switch_to.window(handles[-1])

# 在新窗口中查找并输入用户名
b = browser.find_element(By.ID, "fm-login-id")
b.send_keys("11111111111")

time.sleep(999)

上述代码做了以下更改:

1. 使用CSS选择器div.member-logout.J_UserMemberLogout a.btn-login.ml1.tb-bg.weight来定位登录按钮。
2. 使用window_handles获取所有窗口的句柄(handle)列表,并通过switch_to.window()切换到最后一个窗口(即新打开的窗口)。
3. 在新窗口中使用By.ID定位用户名输入框,并输入用户名。

请注意,使用Selenium进行网页操作时,可能会有一些异步加载或页面渲染延迟的情况,因此在进行元素查找和操作时,最好加入适当的等待,以确保元素已完全加载和可见。您可以使用time.sleep()方法简单地添加固定的等待时间,但更好的方式是使用WebDriverWait结合条件等待,以提高代码的稳定性和灵活性。

希望这能帮助到您!如果您有更多问题,请随时提问。
如果问题已经解决,请设置最佳答案
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-8-26 17:44:53 | 显示全部楼层
问题出在你使用了 a.click() 模拟点击登录按钮后,程序报错了。注释掉这两行代码后,程序可以正常运行,但是你想知道如何切换到登录后的输入用户名和密码的网页界面。

要切换到新窗口,你可以使用 browser.window_handles 来获取当前所有窗口的句柄,然后使用 browser.switch_to.window() 方法切换到新窗口。以下是修改后的代码示例:
import time
from selenium import webdriver
from selenium.webdriver.common.by import By

browser = webdriver.Edge()
browser.get("https://www.taobao.com/")

# 点击登录按钮
a = browser.find_element(By.XPATH,"//div[@class='member-logout J_UserMemberLogout']/a[@class='btn-login ml1 tb-bg weight']")
a.click()

# 切换到新窗口
handles = browser.window_handles
browser.switch_to.window(handles[-1])

# 输入用户名和密码
b = browser.find_element(By.ID,"fm-login-id")
b.send_keys("11111111111")

time.sleep(999)

这样,你就可以切换到登录后的输入用户名和密码的网页界面,并且输入用户名了。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-8-26 17:55:08 | 显示全部楼层
可以获取 a 标签的 href 或者 onclick
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-14 15:24

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表