gpt4 book ai didi

Python - Selenium 遍历数组

转载 作者:行者123 更新时间:2023-12-01 01:35:38 26 4
gpt4 key购买 nike

我想做自动化脚本。我在程序开始时定义了一个数组。稍后的程序是打开浏览器并在谷歌中搜索一些特定的单词(例如苹果),下一个程序是单击数组中的第一个字符串并关闭浏览器。稍后执行相同的操作,但它将单击数组中的第二个单词。我的代码:

 from selenium import webdriver
from selenium.webdriver.common.keys import Keys


driver = webdriver.Chrome("C:/Users/Daniel/Desktop/chromedriver.exe")
driver.implicitly_wait(30)
driver.maximize_window()




hasla = ["ispot","myapple"]

for slogan in hasla:
driver.get("http://www.google.com")
search_field = driver.find_element_by_id("lst-ib")

search_field.clear()
search_field.send_keys("apple")
search_field.submit()
name = driver.find_element_by_link_text(slogan)
name.click()
driver.quit()
driver.implicitly_wait(10)

当我从 Windows 控制台启动该程序时。程序正在打开浏览器,在 ispot 和 clsoe 浏览器中查找 apple click,但它没有打开新浏览器,并且对数组中的下一个字符串没有执行相同的操作。有什么解决办法吗?

在控制台中我有这个: screen

最佳答案

您正在 for 循环中退出浏览器,因此第二次迭代无法执行任何操作,因为没有打开浏览器。如果您每次都需要重新开始,您可以尝试打开一个新选项卡并关闭旧选项卡。试试这个:

from selenium import webdriver
from selenium.webdriver.common.keys import Keys

driver = webdriver.Chrome("C:/Users/Daniel/Desktop/chromedriver.exe")
driver.implicitly_wait(30)
driver.maximize_window()

hasla = ["ispot","myapple"]

for slogan in hasla:
driver.get("http://www.google.com")
search_field = driver.find_element_by_id("lst-ib")

search_field.clear()
search_field.send_keys("apple")
search_field.submit()
name = driver.find_element_by_link_text(slogan)
name.click()

# Save the current tab id
old_handle = driver.current_window_handle

# Execute JavaScript to open a new tab and save its id
driver.execute_script("window.open('');")
new_handle = driver.window_handles[-1]

# Switch to the old tab and close it
driver.switch_to.window(old_handle)
driver.close()

# Switch focus to the new tab
driver.switch_to.window(new_handle)

如果您关闭该选项卡,您将无法看到结果。您可能希望保持其打开状态并转到新选项卡。在这种情况下,只需删除 driver.close()

或者,如果您确实想每次都完全关闭浏览器并重新打开它,则只需在 for 循环中包含前三行即可。

from selenium import webdriver
from selenium.webdriver.common.keys import Keys

hasla = ["ispot","myapple"]

for slogan in hasla:
driver = webdriver.Chrome("C:/Users/Daniel/Desktop/chromedriver.exe")
driver.implicitly_wait(30)
driver.maximize_window()

driver.get("http://www.google.com")
search_field = driver.find_element_by_id("lst-ib")

search_field.clear()
search_field.send_keys("apple")
search_field.submit()
name = driver.find_element_by_link_text(slogan)
name.click()
driver.quit()
<小时/>

回答你的第二个问题:

首先,导入NoSuchElementException:

从 selenium.common.exceptions 导入 NoSuchElementException

然后将您的 try/except 替换为:

    try:
name = driver.find_element_by_link_text(slogan)
name.click()
except NoSuchElementException:
print('No such element')
driver.quit()

无论是否找到该元素,它仍然会关闭浏览器并进入下一次迭代。

关于Python - Selenium 遍历数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52426837/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com