【问题标题】:How to know the name of a frame to be used in Selenium + Python如何知道要在 Selenium + Python 中使用的框架的名称
【发布时间】:2018-04-22 02:30:22
【问题描述】:

我有一个关于 selenium 的非常简单的 Python 脚本(我不知道如何开始),所以我想知道您如何知道框架的 'name'/'ID',您可以使用它来识别那个特定的框架。我想问一下在哪里可以买到

我不知道你是否理解,但是,我想知道我如何识别那个特定的框架? 还有我怎么能点击呢?

【问题讨论】:

  • Hey Dave 展示一些 HTMl 代码和你所做的工作,这样我们很容易给出答案
  • 好吧,我刚刚找到了一些可以玩的网站(广告)here,下面的代码是我的最新代码

标签: python selenium iframe


【解决方案1】:

我得到了这个代码:

from selenium import webdriver

driver = webdriver.Chrome()
#driver.maximize_window()
driver.get('http://whatis.techtarget.com/definition/IFrame-Inline-Frame')

driver.switch_to_frame("google_ads_iframe_/3618/swht/DEFINITION_0")
# OR we can use XPATH as follows:
#
# element = driver.find_element_by_xpath('PASTE_COPIED_XPATH')
# driver.switch_to.frame(element)  # for switching to the intended frame

element_to_click = driver.find_element_by_xpath('//*
[@id="DfaVisibilityIdentifier_1417699170"]/a/img')
element_to_click.click()

# do whatever you want to do here

driver.switch_to_default_content()  # for switching back to main frame

driver.close()

现在它有错误并且很长:

NoSuchElementException: Message: u'no such element: Unable to locate element: {"method":"xpath","selector":"//*[@id="DfaVisibilityIdentifier_1417699170"]/a/img"}\n  (Session info: chrome=62.0.3202.89)\n  (Driver info: chromedriver=2.33.506120 (e3e53437346286c0bc2d2dc9aa4915ba81d9023f),platform=Windows NT 6.1.7601 SP1 x86_64)' 

【讨论】:

    【解决方案2】:

    您可能想先阅读Selenium documentation。那里有一些非常好的和简单的例子。

    在您的情况下,您只需右键单击框架中的任意位置,然后单击“检查”(我假设您使用的是 Chrome 浏览器)。然后在元素选项卡中,您可以找到该框架的名称/ ID。您可以通过右键单击该行并单击“复制”>“复制 XPath”来找到该帧的 XPath。这也适用于可点击元素。以同样的方式复制 XPath,并使用 click 方法点击该元素。

    对于切换到一个框架,我们也可以简单的使用框架的名称,如下。我们可以通过右键单击元素并在开发人员工具面板的元素选项卡中观察 HTML 代码来获取框架名称。

    driver.switch_to_frame("frameName")
    

    以下代码显示了如何切换到一个框架,然后单击该框架内的一个元素:

    from selenium import webdriver
    
    driver = webdriver.Chrome()
    driver.maximize_window()
    driver.get('http://www.example.com')
    
    driver.switch_to_frame("REPLACE_ME_WITH_FRAME_NAME_FROM_HTML")
    # OR we can use XPATH as follows:
    #
    # element = driver.find_element_by_xpath('REPLACE_ME_WITH_FRAME_XPATH')
    # driver.switch_to.frame(element)  # for switching to the intended frame
    
    element_to_click = driver.find_element_by_xpath('REPLACE_ME_WITH_CLICKABLE_ELEMENT_XPATH')
    element_to_click.click()
    
    # do whatever you want to do here
    
    driver.switch_to_default_content()  # for switching back to main frame
    
    driver.close()
    

    虽然上面的示例显示了 XPath,但您也可以使用 CSS 选择器。但建议使用 XPath。

    【讨论】:

    • 谢谢,这既快速又可靠,但我不知道您的浏览器是否也会发生这种情况,但我只是在广告(谷歌广告)上尝试过,但似乎找不到觉得正常吗?
    • 我假设您没有考虑欺骗 Google 广告。这是不道德的,谷歌足够聪明,可以识别此类活动并阻止付款。您应该能够使用 XPath 找到元素,除非该站点使用一些动态内容,例如。闪光。
    • 呃,不,刚刚发现 selenium 很酷...想欺骗其他人...但是与 google 搞混...多么好的死法(有点夸张)我尝试在“检查”中播放一些广告,但我不知道,但也许我正在寻找的是当我放置光标时广告被突出显示的广告,但想问的是那些 Xpath?
    • 哈哈哈。祝你好运 :) 如果您在理解上述代码方面有任何问题,请告诉我。
    • 您认为我正在寻找的那个是当我将光标放在代码上时突出显示广告的那个吗?那些是 Xpath 吗?
    猜你喜欢
    • 1970-01-01
    • 2022-11-01
    • 2017-12-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-07-11
    • 2014-06-09
    • 2015-10-04
    相关资源
    最近更新 更多