Python-硒通过数组

时间:2018-09-20 13:55:37

标签: python selenium automation

我想做自动脚本。我在程序开始时定义了一个数组。 以后的程序打开浏览器并在google中搜索某个特定的单词(例如apple),下一个程序从数组中首先单击字符串并关闭浏览器。稍后执行相同的操作,但是它将单击数组中单词的秒。 我的代码:

 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浏览器中寻找苹果点击,但是它没有打开新的浏览器,并且它对数组中的下一个字符串没有做同样的事情。有解决方案吗?

在控制台中,我有这个: screen

1 个答案:

答案 0 :(得分:2)

您将在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:

from selenium.common.exceptions import NoSuchElementException

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

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

如果找不到该元素,它仍将关闭浏览器并转到下一个迭代。