如何在浏览器打开时弹出“广告”?
问题描述:
我已经在python中编写了一个脚本,并结合selenium来解析网页中的一些公司名称。我定义的选择器是完美无瑕的。然而,一旦网页开启了一个令人讨厌的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()
弹出广告类似下面(亮一个):
答
您可以尝试等待广告通过点击“跳过”按钮关闭它:
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秒内
非常感谢先生安德森,为你有效的答案。我从来没有遇到过你的解决方案的单个实例无效。它总是有魔力。我从你那里听到很长时间了。但是,您在哪里找到了“iframe”的位置?我的意思是,你必须看到这是因为你使用了表达式'// span [。='SKIP']'。我溺爱几个小时来解决它,但失败了。再次感谢。 – SIM
你可以找到带有XPath的iframe iframe iframe [starts-with(@id,“google_ads_iframe”)]'。我只是用dev控制台找到它 - 没有什么特别的。另请注意,“跳过”按钮不在“iframe”中,因此您不必切换到帧 – Andersson