Home > Mobile >  Switching to pop-up window that cannot be found via windows_handle Selenium/Pytohn
Switching to pop-up window that cannot be found via windows_handle Selenium/Pytohn

Time:01-21

I dug up my old code, used for Scopus scraping. It was created while I was learning programming. Now a window pops up on the Scopus site that I can't detect using windows_handle.

Scopus Pop-up window

import openpyxl
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.select import Select
import time
import pandas as pd
from openpyxl import load_workbook

DOI = []
TITLE = []
NUM_AUTHORS = []
NUM_AFFILIATIONS = []
AUTHORS = []
YEAR = []
JOURNAL = []
DOCUMENT_TYPE = []
COUNTRIES = []
SEARCH = []
DATES = []

chrome_driver_path = "C:\Development\chromedriver.exe"
driver = webdriver.Chrome(executable_path=chrome_driver_path)

driver.get("https://www.scopus.com/search/form.uri?display=basic#basic")
# searching details
search = input("Search documents: \n")
SEARCH.append(search)
date = input("Do you want to specify dates?(Yes/No)")
if date.capitalize() == "Yes":
    driver.find_element(By.CLASS_NAME, 'flex-grow-1').send_keys(search)
    driver.find_element(By.XPATH,
                        "/html/body/div/div/div[1]/div[2]/div/div[3]/div/div[2]/div["
                        "2]/micro-ui/scopus-homepage/div/div/els-tab/els-tab-panel[1]/div/form/div[2]/div[1]/button["
                        "2]/span[2]").click()
    time.sleep(1)
    starting_date = input("Put starting year.")
    to_date = input("Put end date.")
    DATES.append(starting_date)
    DATES.append(to_date)
    drop_menu_from = Select(driver.find_element(By.XPATH,
                                                "/html/body/div/div/div[1]/div[2]/div/div[3]/div/div[2]/div["
                                                "2]/micro-ui/scopus-homepage/div/div/els-tab/els-tab-panel["
                                                "1]/div/form/div[2]/div[1]/els-select/div/label/select"))
    drop_menu_from.select_by_visible_text(starting_date)
    drop_menu_to = Select(driver.find_element(By.XPATH,
                                              "/html/body/div/div/div[1]/div[2]/div/div[3]/div/div[2]/div["
                                              "2]/micro-ui/scopus-homepage/div/div/els-tab/els-tab-panel["
                                              "1]/div/form/div[2]/div[2]/els-select/div/label/select"))
    drop_menu_to.select_by_visible_text(to_date)
    driver.find_element(By.XPATH,
                        '/html/body/div/div/div[1]/div[2]/div/div[3]/div/div[2]/div['
                        '2]/micro-ui/scopus-homepage/div/div/els-tab/els-tab-panel[1]/div/form/div[4]/div['
                        '2]/button/span[1]').click()
else:
    DATES = ["XXX", "YYY"]
    driver.find_element(By.CLASS_NAME, 'flex-grow-1').send_keys(search)
    driver.find_element(By.XPATH,
                        "/html/body/div/div/div[1]/div[2]/div/div[3]/div/div[2]/div["
                        "2]/micro-ui/scopus-homepage/div/div/els-tab/els-tab-panel[1]/div/form/div[2]/div["
                        "2]/button").click()
time.sleep(2)
doc_num = int(driver.find_element(By.XPATH,
                                  "/html/body/div[1]/div/div[1]/div/div/div[3]/form/div[1]/div/header/h1/span[1]").text.replace(
    ",", ""))

time.sleep(5)

driver.find_element((By.XPATH, "/html/body/div[11]/div[2]/div[1]/div[4]/div/div[2]/button")).click()

This is how the beginning of the code looks like. The last element

driver.find_element((By.XPATH, "/html/body/div[11]/div[2]/div[1]/div[4]/div/div[2]/button")).click()

should find on click on dismiss button. I do not know how to handle it.

I have tried finding element by driver.find_element, checking if the pop-up window can be detected and handled via windows_handle.

CodePudding user response:

Actually that is not a popup because its code is contained in HTML of the page itself. Popups are either prompts of the browser (not contained in the HTML) or other browser windows (have a separate HTML).

I suggest to target the button by using the text contained in it, in this case we look for a button containing exactly "Dismiss"

driver.find_element(By.XPATH, '//button[text()="Dismiss"]').click()
  • Related