Python Selenium Webdriver:无法在提交按钮后找到确认对话框(显示-覆盖类对象)

bfnvny8b  于 2023-05-30  发布在  Python
关注(0)|答案(1)|浏览(150)

我使用Selenium Webdriver和Python自动安排约会。
Webdriver选项:

options = Options()
options.binary_location = '/opt/headless-chromium'
options.add_argument('--headless')
options.add_argument('--no-sandbox')
options.add_argument('--single-process')
options.add_argument('--disable-dev-shm-usage')

driver = webdriver.Chrome('/opt/chromedriver',chrome_options=options)
driver.maximize_window()

我能够选择我想要的约会日期,并找到提交按钮。
submit按钮的html(您可以看到data-confirm属性配置的对话框):

<input type="submit" name="commit" value="Reprogramar" id="appointments_submit" data-confirm="{&quot;title&quot;:&quot;¿Desea reprogramar esta cita?&quot;,&quot;ok&quot;:&quot;Confirmar&quot;,&quot;cancel&quot;:&quot;Cancelar&quot;}" data-disable-with="Por favor, espere." class="button primary">

我是如何找到它的:

appointments_submit = driver.find_element(By.ID, 'appointments_submit')
appointments_submit.click()

但是,当我点击提交按钮时,它会创建一个确认对话框(直到现在,它才出现在页面的正文中)。无论我尝试了多少,我都无法使Web驱动能够定位这个元素。
元素的Html:

<div class="reveal-overlay" style="display: block;"><div data-reveal="ib04bi-reveal" class="reveal " role="dialog" aria-hidden="false" tabindex="-1" style="display: block; top: 97px;">
  <h2 data-confirm-title="" class="h3 text-center alert-icon">¿Desea reprogramar esta cita?</h2>
  <p data-confirm-body="" class=""></p>
  <div data-confirm-footer="" class="text-center">
    <a data-confirm-cancel="" class="button secondary">Cancelar</a>
  <a class="button alert">Confirmar</a></div>
<a aria-label="Close modal" class="close-button" data-close="">
  <span aria-hidden="true" class="fas fa-times"></span>
  </a>
  </div></div>

图片:element webdriver cannot locate
这就是失败的地方:

confirmation_button = driver.find_element(By.CSS_SELECTOR, 'body > div.reveal-overlay > div > div > a.button.alert')

confirmation_button .click()
[ERROR] NoSuchElementException: Message: no such element: Unable to locate element: 
{
    "method": "css selector",
    "selector": "body > div.reveal-overlay > div > div > a.button.alert"
}

我也试过WebDriverWait,但也不起作用,因为抛出TimeOutException:
这也没用。

confirmation_button = WebDriverWait(driver, 20).until(EC.presence_of_element_located((By.CSS_SELECTOR, "body > div.reveal-overlay > div > div > a.button.alert")))
confirmation_button .click()

请帮助我解决此问题。我觉得自己被困住了。
PD:我正在python3.7 aws lambda函数中运行代码
PD 2:webdrive无法找到的这个对话框元素是网页<body>的一部分。问题是,只有在点击提交按钮后才会出现。我分享了之前和之后的一些截图。
Before clicking the submit button (only 6 div are showing)
After clicking the submit button (a 7th div appears)
第7个div是webdriver找不到的元素。

mtb9vblg

mtb9vblg1#

我很高兴和尴尬地通知,我能够解决这个问题后一天张贴这个问题。
这个问题是因为我忘记了通过点击它来选择最早的可用日期。这就是为什么单击提交按钮没有打开对话框窗口(因为它被禁用),因此webdriver无法找到它。

earliest_available_date.click()

我犯了这个错误,因为我在本地测试webscrapping,打开ui,但是当我部署到lambda函数时,我使用了--headless选项。
只有在lambda中,我忘记添加这行代码。

相关问题