2017-10-15 9 views
0

Ich habe ein Skript in Python in Kombination mit Selen geschrieben, um einige Firmennamen von einer Webseite zu analysieren. Der von mir definierte Selektor ist einwandfrei. Sobald jedoch die Webseite geöffnet wird, erscheint ein nerviges ad, das die Daten versteckt und dafür kann ich nicht dorthin gelangen. Wie kann ich es raus und parse die Daten, die ich gerne würde. Ich habe versucht, mit mehreren iframes auf dieser Webseite verfügbar, aber keiner von ihnen funktioniert. Die vorhandene, die ich in meinem Skript verwendet, gibt eine Fehlermeldung Message: no such element: Unable to locate element.Wie man "ad" ausstößt, wenn der Browser geöffnet wird?

Dies ist, was ich bisher versucht:

from selenium import webdriver 

driver = webdriver.Chrome() 
driver.get("https://www.inc.com/inc5000/list/2017") 
driver.switch_to_frame(driver.find_element_by_id("jw_player_iconic")) 
for item in driver.find_elements_by_css_selector("#data-container .row"): 
    company = item.find_elements_by_css_selector(".company a")[0].text 
    print(company) 
driver.quit() 

Die Pop-up-Anzeige ist so etwas wie unten (die helle eins):

enter image description here

Antwort

1

Sie können versuchen, für Anzeige warten um es durch Klicken auf "SKIP" zu schließen:

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

driver = webdriver.Chrome() 
driver.get("https://www.inc.com/inc5000/list/2017") 
driver.maximize_window() 

try: 
    ad_iframe_close = wait(driver, 3).until(EC.element_to_be_clickable((By.XPATH, "//span[.='SKIP']"))) 
    ad_iframe_close.click() 
except TimeoutException: 
    pass 

for item in driver.find_elements_by_css_selector("#data-container .row"): 
    company = item.find_elements_by_css_selector(".company a")[0].text 
    print(company) 

Dies sollte Ihnen erlauben, zu warten schließen Sie den Anzeigerahmen oder tun Sie nichts, falls er nicht innerhalb von 3 Sekunden erscheint

+0

Vielen Dank Sir Andersson, für Sie eine effektive Antwort. Ich stoße niemals auf eine einzige Instanz Ihrer Lösung, um unwirksam zu sein. Es macht immer die Magie. Es ist lange her, seit ich von dir gehört habe. Wo hast du den Ort des iframe gefunden? Ich meinte, du musst es gesehen haben, weil du den Ausdruck '// span [. = 'SKIP']' benutzt hast. Ich verdarb einige Stunden, um es zu lösen, aber scheiterte. Danke noch einmal. – SIM

+0

Sie finden die Anzeige "iframe" mit XPath '// iframe [startet mit (@id," google_ads_iframe ")]'. Ich habe es einfach mit der Dev-Konsole gefunden - nichts besonderes. Beachten Sie auch, dass der "SKIP" -Knopf außerhalb des "iframe" liegt, so dass Sie nicht zum Rahmen wechseln müssen – Andersson

Verwandte Themen