Не открывать URL после .click () selenium Python - PullRequest
0 голосов
/ 20 апреля 2020

Я собираю данные из формы, используя селен и BeautifulSoup. Первый шаг - отправка записи в поле поиска. Второй шаг - это очистка данных от недавно загруженной формы. Оба эти шага выполнимы.

РЕДАКТИРОВАТЬ: Когда скрипт отправляет запись ( send_keys () ) и нажимает кнопку отправки ( submit.click () ), веб-страница загружается. Я хочу, чтобы веб-страница загружалась в фоновом режиме, поэтому я ее не вижу.

Вот код:

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 bs4 import BeautifulSoup

searchterm = "DE431311903710"
url = 'http://eagri.cz/public/web/mze/zemedelstvi/zivocisna-vyroba/zivocisne-komodity/kone/centralni-pristupove-misto-pro-evidenci.html'

driver = webdriver.Firefox()#, executable_path=r'C:\Utility\BrowserDrivers\chromedriver.exe')

driver.get(url)

driver.implicitly_wait(50)
    ## You have to switch to the iframe like so: ##
driver.switch_to.frame(driver.find_element_by_tag_name("iframe"))

    ## Insert text via xpath ##
elem = driver.find_element_by_xpath("/html/body/div/form/div[3]/div/div[2]/table/tbody/tr[2]/td/table/tbody/tr[2]/td[2]/input")
elem.send_keys(searchterm)

submit = driver.find_element_by_xpath("//*[@id=\"btnVyhledat\"]")

submit.click()

p = BeautifulSoup(driver.page_source, features = "html.parser")
l = []
k = []
inputs = p.find_all('span',{"class":"editprvek"})
inputs2 = p.find_all("span",{"class":"editpopis"})
for i in inputs:
    l.append(i.text)

for j in inputs2:
    k.append(j.text)

def merge(list1,list2):
    merged = [(list1[i], list2[i]) for i in range(0, len(list1))]
    return merged

print(merge(k,l))

1 Ответ

0 голосов
/ 20 апреля 2020

Если я понял проблему После того, как вы отправите поиск, потребуется время для загрузки данных таблицы.

Добавьте эту строку после submit.click() Индуцируйте WebDriverWait () и дождитесь visibility_of_element_located ()

WebDriverWait(driver,30).until(EC.visibility_of_element_located((By.CSS_SELECTOR,".editprvek")))

Импорт следующих библиотек.

from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...