python小小白哟 发表于 2023-8-26 17:44:08

使用selenium模拟点击后切换到新窗口

就是使用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结合条件等待,以提高代码的稳定性和灵活性。

希望这能帮助到您!如果您有更多问题,请随时提问。
如果问题已经解决,请设置最佳答案

isdkz 发表于 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)


这样,你就可以切换到登录后的输入用户名和密码的网页界面,并且输入用户名了。

歌者文明清理员 发表于 2023-8-26 17:55:08

可以获取 a 标签的 href 或者 onclick
页: [1]
查看完整版本: 使用selenium模拟点击后切换到新窗口