Selenium, в html не вижу элемент, хотя в броузере selenium его видно

Не могу никак решить. Захожу на страничку с помощью Selenium и сохраняю полученный html в файл, при этом не вижу там один из элементов, хотя в окне браузера, в котором отображается происходящее, этот элемент видно, и даже успеваю по нему щелкнуть, при установленном большом ожидании.

Ниже адрес страницы, на которой осуществляется поиск. Нужно пролистать до раздела "информация о заказчике" и наименование заказчика является ссылкой. Нужна она. (Причем, часть подобных запросов нормально обрабатывается, а часть ломается.)

url_customer = 'http://zakupki.gov.ru/pgz/public/action/contracts/info/common_info/show?source=epz&contractInfoId=3076209'

driver = webdriver.Chrome()

Ожидание побольше поставил, чтобы наглядно было

wait = WebDriverWait(driver, 20)

Попытка пролистать до конца страницы, тоже не помогает:

driver.find_element(By.TAG_NAME,'body').send_keys(Keys.END)

Попытка подождать пока загрузится футер(была мысль, что он же в самом конце)

wait.until(EC.presence_of_element_located((By.CSS_SELECTOR, "footer.footer")))

Мои попытки подождать загрузку желаемого элемента

t_xpath = "//div[@id='ajax-group']/span[@class='section__info/a']"
wait.until(EC.presence_of_element_located((By.XPATH, t_xpath)))

Записываю в файл то, что загрузилось и вижу , что там нет нужной ссылки

html = driver.page_source
with open('customer.html', 'w') as file:
    file.write(html)

В записанном файле нужное место выглядит вот так, без нужного тэга

<div class="container">
    <div class="row blockInfo">
        <div class="col">
            <h2 class="blockInfo__title">Информация об изменении контракта</h2>
            <div class="blockInfo__section">
                    
                <section class="blockInfo__section section">
                    
                        
                            <span class="section__title">Причина изменения условий контракта</span>
                            <span class="section__info"></span>
                        
                        
                    
                </section>

Работающий код полностью:

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.webdriver.common.keys import Keys

url_customer = 'http://zakupki.gov.ru/pgz/public/action/contracts/info/common_info/show?source=epz&contractInfoId=3076209'

driver = webdriver.Chrome()
wait = WebDriverWait(driver, 20)
try:
    driver.get(url_customer)
    t_xpath = "//div[@id='ajax-group']/span[@class='section__info/a']"
    driver.find_element(By.TAG_NAME,'body').send_keys(Keys.END)
    wait.until(EC.presence_of_element_located((By.CSS_SELECTOR, "footer.footer")))
    wait.until(EC.presence_of_element_located((By.XPATH, t_xpath)))
except Exception as ex:
    print(f'Error: {ex}')

html = driver.page_source
with open('customer.html', 'w') as file:
    file.write(html)

Ответы (1 шт):

Автор решения: Steenkle

Ваш XPATH на странице у меня ничего не нашел. Зацепился за "Полное наименование заказчика"

(By.XPATH, "//*[.='Полное наименование заказчика']/../span/a").click()

Чтобы не пролистывать страницу, следует указать в options странице размер, для пользователя ничего не видно, а селениум видит всё.

driver.set_window_size(1400, 3000)

Ещё при клике по ссылке, обнаружил открытия нового окна, чтобы в нем работать нужно на него переключиться, или все элементы которые Вы введете, он не найдет так как он работает на нулевом окне. Делается это следующим образом:

driver.switch_to.window(driver.window_handles[1])

Где 1 - это номер вкладки, самая первая - 0, вторая 1 и т.д.

Следовательно нужно перейти на вторую вкладку [1], и пробуйте Ваш код.

html = driver.page_source
with open('customer.html', 'w') as file:
    file.write(html)
→ Ссылка