无法单击网站上弹出的覆盖容器中的按钮

2024-06-01 04:46:35 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试自动搜索疫苗接种预约。因此,我在Python中使用selenium和chromedriver自动填充网站。第一步很好,但在我填写了一个复选框后,我被困在一个单独的窗口覆盖原始表单的地方。弹出的覆盖不是iframe,因此切换帧不起作用。使用find_-element_by_xpath不起作用:既不用于查找覆盖上的按钮,也不用于查找常规覆盖。我还尝试:

element = WebDriverWait(web,20).until(EC.element_to_be_clickable((By.XPATH, '//*[@id="mat-  dialog-13"]')))
element.click 

在这种情况下,覆盖只是需要一些时间才能可见,但这会导致exceptions.TimeoutException:

有人能帮忙吗? 这是网页:https://www.impfportal-niedersachsen.de/portal/#/appointment/public

我被困在下面的对话中: Popping UP Overlay

因此,我只需要接受此窗口中的“Verstanden按钮”即可继续我的工作流程

编辑:以下是“Verstanden”按钮的HTML:

<button type="button" mat-raised-button="" tabindex="-1" color="primary" class="mat-focus-indicator mat-raised-button mat-button-base mat-primary _mat-animation-noopable" style=""><span class="mat-button-wrapper">Verstanden</span><span matripple="" class="mat-ripple mat-button-ripple"></span><span class="mat-button-focus-overlay"></span></button>

“Verstanden”按钮位于新窗口的底部。我尝试向下滚动到它,但python必须找到首先滚动的位置。这就是为什么我尝试先单击新窗口,但这就是我被卡住的地方

当我第一次尝试工作流时,我直接尝试“单击”页面底部的第一个复选框,与表单的前面步骤相同:

Checkbox to be set to "Ja"

但弹出窗口似乎阻止python完成对复选框的单击,因为我得到了一个例外:

ElementClickInterceptedException:

因此我添加了(我称我的驱动程序为“web”):

try:
    #Tries to click on the Checkbox to be set to "Ja"
    web.find_element_by_xpath('//*[@id="mat-radio-9"]/label/span[1]/span[2]').click()
    time.sleep(2)
    
except ElementClickInterceptedException:
    # if checkbox is hidden by new window, press Verstanden Button
    PopUpButton = web.find_element_by_xpath('//*[@id="mat-dialog-14"]/confirm-dialog/mat-dialog-content/div/button')
    time.sleep(2)
    PopUpButton.click()

但是,如果像这样执行代码,我会得到:

selenium.common.exceptions.NoSuchElementException: Message: no such element: Unable to locate element: {"method":"xpath","selector":"//*[@id="mat-dialog-14"]/confirm-dialog/mat-dialog-content/div/button"}

下面是我被卡住的整个块的HTML(我将其分割):

<mat-dialog-container tabindex="-1" aria-modal="true" class="mat-dialog-container ng-tns-c33-39 ng-trigger ng-trigger-dialogContainer ng-star-inserted" id="mat-dialog-14" role="dialog" style="transform: none;">
<confirm-dialog class="ng-star-inserted" style="">
<mat-dialog-content class="mat-dialog-content" style="padding-bottom: 10px;">
<h2>Bitte beachten Sie:</h2>
<p>Wir weisen Sie daraufhin, dass das Vorliegen einer <b>medizinischen oder sonstigen Impfberechtigung</b> mithilfe geeigneter Unterlagen im Impfzentrum nachgewiesen werden muss.<br><br>Ein geeigneter Nachweis ist beispielsweise<ul>    <li>         eine Bescheinigung der Ärztin oder des Arztes, welche die Berechtigung der nach der CoronaImpfV genannten Erkrankung bestätigt.    </li>    <li>         das durch die Krankenkasse übermittelte Schreiben der Frau Ministerin Behrens zur Berechtigung zur Schutzimpfung gegen das Covid-19-Virus.    </li>    <li>         eine formlose schriftliche Bestätigung durch die jeweilige Einrichtung.    </li>    <li>         eine schriftliche Bescheinigung (von der pflegebedürftigen bzw. schwangeren Person oder einer Vertretung ausgefüllt und unterschrieben), welche die Versicherung beinhaltet, dass nur bis zu zwei Personen benannt werden und die in der Bescheinigung benannte Person zu dem Kreis der Berechtigten gehört          (einen Vordruck finden Sie hier: <a target="_blank" href="https://www.niedersachsen.de/download/167141">https://www.niedersachsen.de/download/167141</a>),          <b>und zusätzlich</b> eine Bestätigung über die Pflegebedürftigkeit der zu pflegenden Person (z.B. Kopie des Nachweises über einen Pflegegrad oder ärztliche Bestätigung) oder bei schwangeren Personen eine Kopie aus dem Mutterpass mit dem Ausstellungsdatum und dem Namen der Schwangeren bzw. einen gleichwertigen Nachweis.    </li>    <li>         Für die <b>Härtefallregelung</b>: Erforderlich ist die Bescheinigung einer Ärztin oder eines Arztes oder einer psychologischen Psychotherapeutinnen oder eines Psychotherapeuten, die die impfwillige Person innerhalb der letzten 12 Monate wegen der die Priorisierung begründenden Erkrankung regelmäßig behandelt haben, dass nach ärztlicher Beurteilung der besonderen Umstände des Einzelfalls ein sehr hohes, hohes oder erhöhtes Risiko für einen schweren oder tödlichen Krankheitsverlauf nach einer Infektion mit dem Coronavirus SARS-CoV-2 besteht, sofern es sich um eine Erkrankung handelt, die nicht bereits in § 3 und § 4 der CoronaImpfV aufgeführt ist.    </li></ul>Wir bitten Sie, diese Unterlagen zu Ihrem Termin mitzubringen.</p><br>
<div fxlayout="row" fxlayoutgap="10px" style="flex-direction: row; box-sizing: border-box; display: flex;">
<button type="button" mat-raised-button="" tabindex="-1" color="primary" class="mat-focus-indicator mat-raised-button mat-button-base mat-primary _mat-animation-noopable" style="">
<span class="mat-button-wrapper">Verstanden</span><span matripple="" class="mat-ripple mat-button-ripple"></span><span class="mat-button-focus-overlay"></span></button>
<!----></div></mat-dialog-content></confirm-dialog><!----></mat-dialog-container>


Tags: toidstylebuttonlielementclassdialog