继上一个问题...
我有一个需要用 Selenium 抓取的 URL 列表,但在获得第一个 URL 的结果后它总是阻止我。
这就是我正在做的事情:
from selenium import webdriver
from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC
import time
from selenium.webdriver.firefox.options import Options
options = Options()
options.add_argument('--disable-blink-features=AutomationControlled')
options.add_argument('--headless') # ensure GUI is off
options.add_argument('--no-sandbox')
options.add_argument('--disable-dev-shm-usage')
expres = pd.DataFrame()
d2 = ['http://www.biblioteca.presidencia.gov.br/presidencia/ex-presidentes/michel-temer/discursos-do-presidente-da-republica/discurso-do-presidente-da-republica-michel-temer-durante-cerimonia-de-inauguracao-do-hospital-notre-dame-barretos-sp',
'http://www.biblioteca.presidencia.gov.br/presidencia/ex-presidentes/michel-temer/discursos-do-presidente-da-republica/discurso-do-presidente-da-republica-michel-temer-durante-a-visita-a-25a-edicao-da-feira-internacional-de-tecnologia-agricola-em-acao-agrishow',
'http://www.biblioteca.presidencia.gov.br/presidencia/ex-presidentes/michel-temer/discursos-do-presidente-da-republica/brinde-do-presidente-da-republica-michel-temer-no-almoco-oferecido-em-homenagem-ao-senhor-desire-delano-bouterse-presidente-da-republica-do-suriname',
'http://www.biblioteca.presidencia.gov.br/presidencia/ex-presidentes/michel-temer/discursos-do-presidente-da-republica/declaracao-a-imprensa-do-presidente-da-republica-michel-temer-apos-assinatura-de-atos',
'http://www.biblioteca.presidencia.gov.br/presidencia/ex-presidentes/michel-temer/discursos-do-presidente-da-republica/discurso-do-presidente-da-republica-michel-temer-durante-a-solenidade-de-abertura-oficial-da-84a-exposicao-internacional-de-gado-zebu-expozebu-2018']
for j in d2:
driver = webdriver.Chrome(options=options)
driver.maximize_window()
driver.get(j)
cont = WebDriverWait(driver, 10).until(EC.visibility_of_element_located((By.XPATH, "//*[@id='content-core']"))).text
print(cont)
在第一次迭代时,它获得所需的内容。
第二次,我收到这条消息:
TimeoutException: Message:
Stacktrace:
RemoteError@chrome://remote/content/shared/RemoteError.sys.mjs:8:8
WebDriverError@chrome://remote/content/shared/webdriver/Errors.sys.mjs:192:5
NoSuchElementError@chrome://remote/content/shared/webdriver/Errors.sys.mjs:510:5
dom.find/</<@chrome://remote/content/shared/DOM.sys.mjs:136:16
我做错了什么?我应该再给它一点时间吗?
因此,我注意到的第一个问题是,您正在创建一个新的 Chrome 实例,并在循环内将其最大化。我假设这不是故意的。如果你把它们拿出来并在循环之外定义你的WebDriverWait
,一切都对我有用。我确实将 XPath 更改为 ID,因为您只是在查找 ID。它使它更简单、更容易阅读等等。
driver = webdriver.Chrome()
driver.maximize_window()
wait = WebDriverWait(driver, 10)
d2 = ['http://www.biblioteca.presidencia.gov.br/presidencia/ex-presidentes/michel-temer/discursos-do-presidente-da-republica/discurso-do-presidente-da-republica-michel-temer-durante-cerimonia-de-inauguracao-do-hospital-notre-dame-barretos-sp',
'http://www.biblioteca.presidencia.gov.br/presidencia/ex-presidentes/michel-temer/discursos-do-presidente-da-republica/discurso-do-presidente-da-republica-michel-temer-durante-a-visita-a-25a-edicao-da-feira-internacional-de-tecnologia-agricola-em-acao-agrishow',
'http://www.biblioteca.presidencia.gov.br/presidencia/ex-presidentes/michel-temer/discursos-do-presidente-da-republica/brinde-do-presidente-da-republica-michel-temer-no-almoco-oferecido-em-homenagem-ao-senhor-desire-delano-bouterse-presidente-da-republica-do-suriname',
'http://www.biblioteca.presidencia.gov.br/presidencia/ex-presidentes/michel-temer/discursos-do-presidente-da-republica/declaracao-a-imprensa-do-presidente-da-republica-michel-temer-apos-assinatura-de-atos',
'http://www.biblioteca.presidencia.gov.br/presidencia/ex-presidentes/michel-temer/discursos-do-presidente-da-republica/discurso-do-presidente-da-republica-michel-temer-durante-a-solenidade-de-abertura-oficial-da-84a-exposicao-internacional-de-gado-zebu-expozebu-2018']
for j in d2:
driver.get(j)
cont = wait.until(EC.visibility_of_element_located((By.ID, "content-core"))).text
print(cont)
这将无一例外地打印您正在查找的文本。