Selenium 脚本在打开新选项卡后搜索上一个选项卡的 HTML

Selenium script searches previous tab's HTML after opening a new tab

使用 selenium 打开一个新标签后,我试图在新标签中寻找一个元素——但脚本仍在搜索前一个标签中的 html 脚本。我如何做到这一点,以便在我打开一个新标签后,它搜索打开的标签的 HTML 而不是前一个标签?

下面是我的代码(它不起作用,因为我尝试在新选项卡上搜索元素,但脚本在第一个选项卡上搜索它)。

options = webdriver.ChromeOptions() 
options.add_argument("user-data-dir=C:\Users\jack_l\AppData\Local\Google\Chrome\User Data")
options.add_argument(r'--profile-directory=Profile 8')
driver = webdriver.Chrome(ChromeDriverManager().install(), options=options)

#Opens the Chrome browser
driver.get("https://www.beatstars.com/")

#Opens a new tab on the browser and goes to that URL
driver.execute_script("window.open('https://www.tunestotube.com/', 'new window')")

#Doesn't work since it's searching for a "tunestotube" element on "beatstars"
theText = driver.find_element(By.XPATH, "/html/body/div[2]/div[2]/div[2]").text

如有任何帮助,我们将不胜感激。

driver.execute_script("window.open('https://www.tunestotube.com/', 'new window')")
driver.switch_to.window( driver.window_handles[1])

theText = driver.find_element(By.XPATH, "/html/body/div[2]/div[2]/div[2]").text

当您打开一个选项卡时,您会得到一个句柄,您需要切换回上一个句柄,然后找到您的元素。

找到解决方案:您需要切换到新的 window

下面的代码在第一个选项卡上获取一个网站,打开一个包含另一个网站的新选项卡,然后可以在该新选项卡中添加 read/find 个元素。

#Gets a browser and sets the window to a variable
driver.get("https://www.exampleWebsiteForFirstTab.com/")
window_before = driver.window_handles[0]

#Open a new tab and sets the window to a variable
driver.execute_script("window.open('https://www.exampleWebsiteForSecondTab.com/', 'new window')")
window_after = driver.window_handles[1]

#Switches the current window to the new tab
driver.switch_to.window(window_after)

###DO WHATEVER YOU WANT IN THE NEW TAB

#Switches the current window to the old tab
driver.switch_to.window(window_before)

希望这能帮助遇到与我相同问题的任何人!