如何使用Selenium和Python单击确认按钮?

时间:2016-08-24 14:08:02

标签: python selenium

我将以下代码转到URL(www.example.com),然后单击链接(示例1)。 (这部分工作正常)

from selenium import webdriver

driver = webdriver.Firefox()
driver.get("https://www.example.com")

link = driver.find_element_by_link_text('Example 1')
link.click()

现在,当我们点击'示例1'链接,它打开一个确认窗口,有2个按钮:'是我是该网站的授权用户'和'不,我是本网站的新访问者'

所以,我希望点击“是的,我是该网站的授权用户”#39;然后最后输入我的登录凭据。 我在上面的代码下面写了这两行,用于点击该按钮。但是这些都不起作用。

button = driver.find_element_by_name("'Yes I am authorized user to this site'")
button.click()

3 个答案:

答案 0 :(得分:3)

如果是警报窗口,则需要使用警报命令。

#import Alert
from selenium.webdriver.common.alert import Alert
from selenium import webdriver

driver = webdriver.Firefox()
driver.get("https://www.example.com")

link = driver.find_element_by_link_text('Example 1')
link.click()
Alert(driver).accept()
#to dismiss alert
#Alert(driver).dismiss()

我认为这会解决您的问题。

答案 1 :(得分:0)

试试这段代码,希望它能帮到你

from selenium import webdriver
import time

driver = webdriver.Chrome('path to chromedriver\chromedriver.exe')
driver.get('https://www.example.com')
driver.maximize_window()

link = driver.find_element_by_link_text('Example 1')
link.click()
handles =driver.window_handles # this will give window handles

driver.switch_to.window(handles[1])
button = driver.find_element_by_name("'Yes I am authorized user to this site'")
button.click()

答案 2 :(得分:0)

根据评论对话,我建议使用XPATH搜索(而不是Name或Id)并等待元素可点击或加载。当网页驱动或网页抓取时,页面可能会有意或无意地加载速度,如果您有暂停或等待硬编码或不存在,这可能会导致问题。这段代码应该允许您使用Selenium和Chromedriver搜索Google(如果您愿意,可以修改驱动程序功能以使用Firefox或其他内容):

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.common.exceptions import ElementNotVisibleException
from selenium.webdriver.chrome.options import Options
from time import sleep

def init_driver(drvr_path):
    chrome_options = Options()
    chrome_options.add_argument("--disable-extensions")
    driver = webdriver.Chrome(drvr_path+'chromedriver.exe',chrome_options=chrome_options)
    driver.wait = WebDriverWait(driver, 5)
    return driver

def lookup(query, driver=None, drvr_path=''):
    driver = None
    if driver is None:
        driver = init_driver(drvr_path)
    driver.implicitly_wait(45) # Allow up to 45 Seconds for page to load
    driver.get("http://www.google.com")
    try:
        box = driver.wait.until(EC.presence_of_element_located((By.XPATH, """//*[@id="lst-ib"]""")))
        box.send_keys(query)
        sleep(3) # Let you see the window open
        button = driver.wait.until(EC.element_to_be_clickable((By.XPATH,"""//*[@id="sblsbb"]/button""")))
        try:
            button.click()
        except ElementNotVisibleException, s:
            print "Error Handled: "+str(s)
            button = driver.wait.until(EC.element_to_be_clickable((By.XPATH,"""//*[@id="sblsbb"]/button""")))
            try:
                button.click()
            except:
                print "Could not search Google..."
                return
        resp=driver.page_source.encode('utf-8')
        with open(query+'.html','wb') as f:
            f.write(resp)
            print 'Wrote the File...'
    except:
        print("Box or Button not found in google.com")
    driver.quit()

例如,如果您的Chromedriver.exe文件位于默认的Python路径中,您可以执行以下操作:lookup('Selenium Python XPATH Examples')并且应该下载Google搜索结果的HTML文件。如果您已经初始化了一个驱动程序,您当然可以将其传递给它。

希望这有帮助