【问题标题】:Closing an advertisement with dynamic ID关闭带有动态 ID 的广告
【发布时间】:2019-08-10 23:13:05
【问题描述】:

首先,我要为我的代码外观缺乏可用示例而道歉。不幸的是,它包含访问我的大学可以使用的数据库的个人信息,所以我不能发布它。数据库的链接在这里: http://www.studiolegale.leggiditalia.it/#mode=home,__m=site.

现在,如果您没有合适的广告拦截器,您会看到垃圾邮件弹出窗口出现。我正在使用 Selenium 在 python 中构建一个刮板,问题似乎是我找不到关闭该窗口的方法。为了我的项目,我需要摆脱它,但我不知道如何。我尝试创建一个动作链来定位并单击“X”按钮,但 XPath 和所述按钮的 ID 都是动态的。

然后我注意到 X 按钮的 ID 总是包含“关闭”,所以我尝试编写类似

的内容
spamlist = browser.find_element_by_xpath('//div[contains(@id, "close")] ')
spamlist.click

但无济于事。它没有给我任何错误,但它不会关闭窗口。我承认我有点初学者,但我真的想不出我做错了什么。我有什么明显的遗漏吗?

编辑 1.1 我被要求提供“关闭元素”按钮的 HTML 代码。这里是:

<div id="id70a13b6c7dclose70a13b6c7d" style="display: block !important; position: absolute !important; z-index: 10 !important; height: 70px !important; padding: 20px !important; margin-top: -20px !important; margin-left: -20px !important; box-sizing: border-box !important; left: 12px; right: auto; top: 12px; bottom: auto; transform: none; transform-origin: left top;"><div id="id70a13b6c7dclose-cross70a13b6c7d" style="display:block !important;height:30px !important;min-width:30px !important;background:#000 !important;border-radius:5px !important;border:2px solid #fff !important;white-space:nowrap !important;position:relative !important;-webkit-box-sizing:border-box !important;box-sizing:border-box !important;"><div id="id70a13b6c7dcross-container70a13b6c7d" style="overflow:visible !important;-webkit-box-sizing:border-box !important;box-sizing:border-box !important;"><div id="id70a13b6c7dcross70a13b6c7d" style="position:absolute !important;height:20px !important;width:20px !important;top:3px !important;left:3px !important;background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAA4AAAAOAgMAAABiJsVCAAAADFBMVEUAAAD///////////84wDuoAAAAA3RSTlMAgGJiSVzhAAAAOElEQVQI12PQYGBqYNjLwP6AYb+D/AMG+Qv1DgzsX/8yMDD+/8LAwFB/AUxAuGAJsBKwYrA2sAEADzMWbZHdzhcAAAAASUVORK5CYII=) !important;background:url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTQiIGhlaWdodD0iMTQiIHZpZXdCb3g9IjAgMCAxNCAxNCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48cGF0aCBkPSJNLjcgMi43Yy0uNC0uNC0uNC0xIDAtMS40bC42LS42Yy40LS40IDEtLjQgMS40IDBMNyA1IDExLjMuN2MuNC0uNCAxLS40IDEuNCAwbC42LjZjLjQuNC40IDEgMCAxLjRMOSA3bDQuMyA0LjNjLjQuNC40IDEgMCAxLjRsLS42LjZjLS40LjQtMSAuNC0xLjQgMEw3IDlsLTQuMyA0LjNjLS40LjQtMSAuNC0xLjQgMGwtLjYtLjZjLS40LS40LS40LTEgMC0xLjRMNSA3IC43IDIuN3oiIGZpbGw9IiNGRkYiIGZpbGwtcnVsZT0iZXZlbm9kZCIvPjwvc3ZnPg==), linear-gradient(transparent, transparent) !important;background-size:20px !important;overflow:visible !important;-webkit-box-sizing:border-box !important;box-sizing:border-box !important;"></div></div><div id="id70a13b6c7dcounter70a13b6c7d" style="display:none !important;text-align:center !important;position:absolute !important;min-height:30px !important;min-width:30px !important;color:#fff !important;font:small-caps bold 18px/30px courier new, sans-serif !important;overflow:visible !important;-webkit-box-sizing:border-box !important;box-sizing:border-box !important;"></div></div></div>

【问题讨论】:

  • 我在普通窗口和隐身模式下都打开了它,但我没有收到任何弹出窗口...是顶部的“cookie策略”栏吗?
  • @Alichino:确实,当你用浏览器打开它时它不会显示它,但是当我使用 chromedrive 打开它时,它确实给了我这个问题。
  • 嗯,我仍然没有得到弹出窗口,即使使用 chromedriver... 你能分享一下初始化 chromedriver 并导航到该页面的代码吗?
  • @Alichino 我可以给你第一部分的代码,问题是我不能给你导航到页面的代码,因为在我到达那里之前我执行了一个登录程序,它允许我来访问数据库。
  • 好的,我明白了。你可以复制弹出窗口周围的 HTML 吗?尽可能多地来自页面源代码。

标签: python-3.x selenium selenium-webdriver web-scraping selenium-chromedriver


【解决方案1】:

弹出窗口很有可能在 iframe 中。 所以在关闭弹窗之前需要切换到frame。

Driver.SwitchTo().frame("frame xpath");

Driver.findElement("enter your xpath to close popup").click();

Driver.SwitchTo().defaultContent();

【讨论】:

  • 感谢您的帮助,但您可能错过了两点:1)我使用的是 python 2)关闭弹出窗口的 xpath 是动态的,这意味着它会在刷新时改变。跨度>
猜你喜欢
  • 1970-01-01
  • 2018-01-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-06-14
  • 1970-01-01
相关资源
最近更新 更多