【问题标题】:How to click on confirmation button using Selenium with Python?如何使用 Selenium 和 Python 单击确认按钮?
【发布时间】:2016-12-31 17:25:36
【问题描述】:

我有以下代码,它转到一个 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 个按钮:“是的,我是该站点的授权用户”和“不,我是该站点的新访问者”

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

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

【问题讨论】:

  • 按钮上有引号吗?因为根据您的代码,您说的按钮是'Yes I am authorized user to this site'
  • 是的,它有那些引号
  • 有什么方法可以提供网站的链接,或者至少是屏幕截图,因为我真的看不出你的代码有什么问题。这可能与网站本身有关。
  • 我也试过:(1) driver.find_element_by_link_text (2) driver.find_element_by_class_name。但这些都不起作用
  • 你能提供一个链接吗?

标签: python selenium


【解决方案1】:

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

#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()

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

【讨论】:

  • 你能分享你尝试这个的链接吗?
  • 在我的情况下完美运行!
【解决方案2】:

根据评论对话,我建议同时使用 XPATH 搜索(而不是名称或 ID)并等待元素可点击或加载。当网络驱动或网络抓取时,页面可能有意或无意地加载缓慢,如果您有暂停或等待硬编码或不存在,这可能会导致问题。这个 sn-p 代码应该允许您使用 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 文件。如果您已经初始化了驱动程序,您当然可以将其传递给它。

希望对你有帮助

【讨论】:

    【解决方案3】:

    试试这个代码,希望对你有帮助

    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()
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-08-22
      • 2019-09-01
      • 2021-04-07
      • 2019-09-16
      • 2018-04-30
      • 2021-01-31
      • 2020-08-06
      • 2017-04-22
      相关资源
      最近更新 更多