Как нажать кнопку поиска с помощью Selenium и Python?

Скриншот кода проверки этой веб-страницы. Я просто хочу сделать динамический щелчок по кнопке "поиск", но я перепробовал много способов, и всегда есть проблемы ... новое в веб-парсинге

Я пытался:

from selenium import webdriver

my_url = 'https://sbs.naic.org/solar-external-lookup/lookup?jurisdiction=AL&searchType=Company&companyStatus=AC'

driver = webdriver.Chrome('D:/chromedriver')

driver.get(my_url)
driver.find_element_by_css_selector(".btn.btn-primary").click()
driver.find_element_by_xpath("//div[@class='btn btn-primary' and @id='submitBtn']").click()
driver.find_element_by_css_selector(".btn.btn-primary").click()

Я просто надеюсь, что мои страницы смогут щелкнуть кнопку «поиск» и перейти на следующую страницу.


person Olly    schedule 31.03.2019    source источник
comment
Пожалуйста, проверьте, присутствует ли iframe в структуре html над элементом   -  person Sameer Arora    schedule 31.03.2019
comment
@SameerArora Привет, спасибо за совет, я новичок в веб-записках, и я думаю, что перед ним есть iframe, я копирую его часть: ‹div _ngcontent-c3 = aria-label = Search class = btn-group role = group› ‹Button _ngcontent-c3 = class = btn btn-primary id = submitBtn type = submit› Search ‹/button› ‹button _ngcontent-c3 = class = btn btn-secondary id = resetBtn type = button› Reset ‹/button› ‹/ div ›   -  person Olly    schedule 31.03.2019
comment
Я решил свою проблему сейчас (element = WebDriverWait (driver, 3) .until (EC.visibility_of_element_located ((By.XPATH, // button [@class = 'btn btn-primary'])))) спасибо всем !!!   -  person Olly    schedule 01.04.2019


Ответы (3)


Невозможно получить доступ к сайту . Однако элемент с текстом как Search кажется Angular элементом, поэтому click() на элементе вам нужно вызвать WebDriverWait, чтобы элемент стал интерактивным, и вы можете использовать любое из следующих Стратегии поиска:

  • Использование CSS_SELECTOR:

    WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.CSS_SELECTOR, "div.btn-group[aria-label='Search']>button.btn.btn-primary#submitBtn"))).click()
    
  • Использование XPATH:

    WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, "//div[@class='btn-group' and @aria-label='Search']/button[@class='btn btn-primary' and @id='submitBtn']"))).click()
    
  • Примечание. Вам необходимо добавить следующий импорт:

    from selenium.webdriver.support.ui import WebDriverWait
    from selenium.webdriver.common.by import By
    from selenium.webdriver.support import expected_conditions as EC
    
person DebanjanB    schedule 31.03.2019
comment
сделай это! а можно мне задать вам еще один вопрос? Речь идет о выборе максимального количества строк, я использую driver.find_element_by_xpath (// select [@ formcontrolname = 'rowLimitField'] / option [value = '50']). Click (), но он показывает, что невозможно найти элемент, и я могу убедиться путь правильный, и iframe, похоже, нет (я пробовал), он использует ту же ссылку с поиском sbs.naic.org/solar-external-lookup/ - person Olly; 01.04.2019
comment
‹Select _ngcontent-c14 = formcontrolname = rowLimitField id = rowLimitId class = ng-untouched ng-pristine ng-valid› ‹! ----› ‹option _ngcontent-c14 = value = 10› 10 ‹/option› ‹option _ngcontent- c14 = значение = 25 ›25 ‹/option›‹ option _ngcontent-c14 = value = 50 ›50 ‹/option›‹ option _ngcontent-c14 = value = 100 ›100 ‹/option› ‹/select› - person Olly; 01.04.2019
comment
@Olly //select[@formcontrolname='rowLimitField']/option[value= '50'], похоже, находится в теге <select>, который вам нужно обработать через класс Select. Не могли бы вы задать новый вопрос в соответствии с вашим новым требованием? - person DebanjanB; 01.04.2019

Для обработки динамического элемента используйте WebDriverWait, а затем щелкните элемент.

WebDriverWait(driver, 30).until(EC.element_to_be_clickable((By.XPATH,'//button[@class="btn btn-primary" and @id="submitBtn"]'))).click()

Пожалуйста, используйте следующий импорт для выполнения вышеуказанного кода.

from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By

Позвольте мне знать, если это помогает.

person KunduK    schedule 31.03.2019

Иногда .click () не работает, и я не знаю почему. Когда это произойдет, попробуйте .send_keys (Keys.ENTER)

Я использовал Firefox и оставил свой путь к исполняемому файлу geckodriver закомментированным в приведенном ниже коде. Я также нахожу элемент по идентификатору, а не по селектору CSS.

from selenium import webdriver

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


my_url = 'https://sbs.naic.org/solar-external-lookup/lookup?jurisdiction=AL&searchType=Company&companyStatus=AC'

driver = webdriver.Chrome('D:/chromedriver')
# driver = webdriver.Firefox(executable_path=r'C:\\Py\\geckodriver.exe');

driver.get(my_url)

click_search = driver.find_element_by_id("submitBtn")
click_search.send_keys(Keys.ENTER)
person Jortega    schedule 31.03.2019
comment
Большое спасибо !!!! Вы тоже решили мою проблему другим замечательным методом! - person Olly; 01.04.2019