Не могу выбрать элемент с Selenium, что бы я ни делал - PullRequest
0 голосов
/ 23 января 2019

Я пытаюсь разработать скребок с использованием селена, но не могу выбрать элементы на следующей странице:

http://comprasnet.gov.br/acesso.asp?url=/ConsultaLicitacoes/ConsLicitacao_texto.asp

Элемент, который я пытаюсь найти, это строка поиска "Texto / Termos a serem pesquisados"

Я пытался

element = driver.find_element_by_id("txtTermo")
или
element = driver.find_element_by_name("txtTermo")

Я также попробовал xpath и css selector.

Мой код:

from selenium import webdriver
from selenium.webdriver.common.keys import Keys

driver = webdriver.Chrome()
driver.get("http://comprasnet.gov.br/acesso.asp?url=/ConsultaLicitacoes/ConsLicitacao_texto.asp")

Я ожидаю, что смогу получить элемент, чтобы послать ключи.

Но я получаю следующую ошибку:

selenium.common.exceptions.NoSuchElementException: Сообщение: нет такого element: Невозможно найти элемент: {"method": "name", "selector": "txtTermo"} (Информация о сеансе: chrome = 71.0.3578.98) (информация о драйвере: chromedriver = 2.45.615279 (12b89733300bd268cff3b78fc76cb8f3a7cc44e5), платформа = Linux 4.15.0-43-generic x86_64)

1 Ответ

0 голосов
/ 23 января 2019

Элемент, который вы пытаетесь получить, находится внутри фрейма.Кадры являются их собственным документом и рассматриваются Selenium как отдельный контекст поиска:

>>> from selenium import webdriver
>>> driver = webdriver.Chrome()
>>> driver.get("http://comprasnet.gov.br/acesso.asp?url=/ConsultaLicitacoes/ConsLicitacao_texto.asp")
>>> element = driver.find_element_by_id("txtTermo")
Traceback (most recent call last):
  File "<pyshell#3>", line 1, in <module>
    element = driver.find_element_by_id("txtTermo")
  File "#PATH_REDACTED#\Python\Python36-32\lib\site-packages\selenium\webdriver\remote\webdriver.py", line 360, in find_element_by_id
    return self.find_element(by=By.ID, value=id_)
  File "#PATH_REDACTED#\Python\Python36-32\lib\site-packages\selenium\webdriver\remote\webdriver.py", line 978, in find_element
    'value': value})['value']
  File "#PATH_REDACTED#\Python\Python36-32\lib\site-packages\selenium\webdriver\remote\webdriver.py", line 321, in execute
    self.error_handler.check_response(response)
  File "#PATH_REDACTED#\Python\Python36-32\lib\site-packages\selenium\webdriver\remote\errorhandler.py", line 242, in check_response
    raise exception_class(message, screen, stacktrace)
selenium.common.exceptions.NoSuchElementException: Message: no such element: Unable to locate element: {"method":"id","selector":"txtTermo"}
  (Session info: chrome=71.0.3578.98)
  (Driver info: chromedriver=2.45.615291 (ec3682e3c9061c10f26ea9e5cdcf3c53f3f74387),platform=Windows NT 10.0.15063 x86_64)

>>> driver.switch_to.frame('main2')
>>> element = driver.find_element_by_id("txtTermo")
>>> element
<selenium.webdriver.remote.webelement.WebElement (session="d5a30c9f45d49a23152767da0b811f58", element="0.6642244007973428-1")>

Представьте себе иерархию кадров, по которой вы можете перемещаться, каждый из которых содержит свою собственную полную иерархию DOM.Когда вы закончите работать внутри фрейма, если вы захотите вернуться к документу верхнего уровня и проделать дополнительную работу, переключитесь на содержимое по умолчанию:

driver.switch_to.default_content()

В наши дни кадры крайне не рекомендуется, и вы неВероятность того, что они встретятся в более новых приложениях, но в прошлом я обнаружил, что (как бы глупо это не звучало), проверка значения driver.page_source может помочь вам понять, какая часть общего документа вы сейчас используете.действующий на.Это покажет вам только источник для текущего контекста поиска, то есть кадр, на который вы в данный момент переключились.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...