2017-10-15 14 views
0

私は、Webページからいくつかの会社名を解析するために、Pythonでスクリプトを書いて、セレンと組み合わせました。私が定義したセレクターは完璧です。しかし、ウェブページが開くとすぐに、厄介なadがデータを隠してしまい、私はそこに到達することができません。どのように私はそれをキックアウトし、私が望むデータを解析することができます。私はいくつかのスイッチを試してみましたが、そのウェブページで利用できるiframesがありましたが、どれも働いていませんでした。スクリプト内で使用していた既存のものが、Message: no such element: Unable to locate elementというエラーを投げます。ブラウザが開いたときに「広告」がポップアップする方法を教えてください。

これは私がこれまで試したものです:

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() 

ポップアップ広告が以下のようなもの(明るい1)である:あなたが広告を待つことを試みることができ

enter image description here

答えて

1

「スキップ」ボタンをクリックすると閉じることができます:

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) 

3秒以内に表示されない場合は何もしないでください。

+0

ありがとうございました。私はあなたのソリューションの1つのインスタンスに遭遇することはありません。それは常に魔法を行う。私はあなたから聞いてから長い時間です。しかし、そのiframeの場所はどこで分かりましたか?つまり、あなたはそれを見たに違いありません。なぜなら、あなたはその式を使ったからです。// span [。= 'SKIP'] '。私はそれを解決するのに数時間を駄目にしたが失敗した。再度、感謝します。 – SIM

+0

「iframe」という広告は、XPathの// iframe [starts-with(@ id、 "google_ads_iframe")]で見つけることができます。私は単にデベロッパーコンソールでそれを見つけた。また、 "SKIP"ボタンがiframeの外にあるので、フレームに切り替える必要はありません – Andersson

関連する問題