проблема веб-сканирования с помощью селена, чтобы нажать на ссылку - PullRequest
0 голосов
/ 19 февраля 2019

Я хочу использовать селен, чтобы перейти на URL, который я подписал, и нажать на 1-ую ссылку в списке и получить текстовые данные.

병역법 위반 [대법원 2018. 11. 1., 선고, 2016 도 10912, 전원 합의체 판결]

это HTML-код для ссылки на эту веб-страницу, которую я пробовал почти каждыйметод, который я могу найти в Интернете.Возможно ли, что эта веб-страница как-то защищена?

from selenium import webdriver
from bs4 import BeautifulSoup
# selenium webdriver chrome


driver = webdriver.Chrome("chromedriver.exe")

# "get url
driver.get("http://law.go.kr/precSc.do?tabMenuId=tab103&query=")


elem = driver.find_elements_by_css_selector("""#viewHeightDiv > table > 
tbody > tr:nth-child(1) > td.s_tit > a""")
if len(elem):
    elem.click()

html = driver.page_source
soup = BeautifulSoup(html, 'html.parser')
notices = soup.find('div', id='bodyContent')

for n in notices:
    print(n)

, поэтому из моего кода селен открывается и переходит на URL, а не нажимает на то, что я хочу.таким образом, данные печати, которые я получаю, не то, что я искал.

Я хочу знать, как сканировать в Интернете http://law.go.kr/precSc.do?tabMenuId=tab103&query=

Может быть, есть способ не использовать селен?я выбираю селен, так как этот URL не фиксирован.последний фиксированный URL - http://law.go.kr/precSc.do?tabMenuId=tab103&query=

1 Ответ

0 голосов
/ 19 февраля 2019

Здесь код с необходимыми ожиданиями, чтобы перейти по ссылке и получить текст:

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

driver = webdriver.Chrome()
wait = WebDriverWait(driver, 10)

driver.get("http://law.go.kr/precSc.do?tabMenuId=tab103&query=")

#Wait for visibility of the first link in viewHeightDiv. Necessary to get text.
elem = wait.until(EC.visibility_of_element_located((By.CSS_SELECTOR, "#viewHeightDiv a")))
#Get first word of the link. Will be you used to check if page loaded by checking title of the text.
title = elem.text.strip().split(" ")[0]

elem.click()
#Wait for h2 to have title we get before.
wait.until(EC.text_to_be_present_in_element((By.CSS_SELECTOR, "#viewwrapCenter h2"), title))

content = driver.find_element_by_css_selector("#viewwrapCenter").text
print(content)
...