【问题标题】:How to find iframe with Selenium and Python 3如何使用 Selenium 和 Python 3 查找 iframe
【发布时间】:2018-01-21 00:50:04
【问题描述】:

我无法在 this 页面上找到一些数据。我需要主图像和子图像的链接。我还需要“Ingridients et allergens”和“Mode d'empoli et protection”两个选项卡下的文本。在我看来,这些是 iframe(或相同的 iframe),但无论我尝试什么都会返回错误。非常感谢您的帮助。

提前致谢

编辑: 这是一个无效代码的示例:

browser = webdriver.Firefox()
link = 'https://naturalia.fr/sardines-naturel-95g'
browser.get(link)

try:
    browser.find_element_by_xpath('''//*[@id="tab-label-ingredients_info-title"]''').click()
    descr = browser.find_element_by_class_name('cms-content')
    print('Description2: {}'.format(descr.text))
except Exception as e:
    print(e)

try:
    main_img = browser.find_element_by_xpath('''//*[@id="maincontent"]/div[2]/div[2]/div[2]/div/div[2]/div[2]/div[1]/div[3]/div[1]/img''').get_attribute('src')
    print(main_img)
except Exception as e:
    print(e)

【问题讨论】:

  • 您能否发布您的具体尝试,以便我们从那里开始提供帮助?
  • 例如,我尝试按类名查找图像-“fotorama__stage”甚至“fotorama__stage__frame fotorama_vertical_ratio fotorama__loaded fotorama__loaded--img magnify-wheel-loaded fotorama__active”。我还通过使用 Chrome 的“复制 XPATH”选项尝试了 xpath - 但所有这些都返回异常。

标签: python selenium iframe automation


【解决方案1】:

你可以使用img标签的xpath找到图片的url,然后访问它的src属性:

>>> driver.find_element_by_xpath('''//*[@id="maincontent"]/div[2]/div[2]/div[2]/div/div[2]/div[2]/div[1]/div[3]/div[1]/img''').get_attribute('src')
'https://naturalia.fr/media/catalog/product/cache/image/368x414/e9c3970ab036de70892d86c6d221abfe/3/2/3263670138016.1-0001.jpg'

对于选项卡下的文本,首先单击它们,然后继续提取文本找到类"cms-content"

>>> driver.find_element_by_xpath('''//*[@id="tab-label-ingredients_info-title"]''').click()
>>> mytext = driver.find_element_by_class_name("cms-content").text
>>> print(mytext)

Sardines, eau, citron* (pulpe, zeste et jus), sel de mer, thym*, fenouil*, persil*, laurier*.
*3.5% des ingrédients d'origine agricole sont issus de l’agriculture biologique certifié par FR BIO 10
Valeurs nutritionnelles moyennes Pour 100g
Energie 136 Kcal / 572 KJ
Matières grasses 4,9 g
Dont acides gras
(......)

您也可以使用class 提取所有图片链接:

images = driver.find_elements_by_class_name("fotorama__img")
links = [image.get_attribute('src') for image in images]

>>> links
['https://naturalia.fr/media/catalog/product/cache/image/368x414/e9c3970ab036de70892d86c6d221abfe/3/2/3263670138016.1-0001.jpg', 'https://naturalia.fr/media/catalog/product/cache/image/368x414/e9c3970ab036de70892d86c6d221abfe/3/2/3263670138016.8-0001.jpg', 'https://naturalia.fr/media/catalog/product/cache/thumbnail/84x84/beff4985b56e3afdbeabfc89641a4582/3/2/3263670138016.8-0001.jpg', 'https://naturalia.fr/media/catalog/product/cache/thumbnail/84x84/beff4985b56e3afdbeabfc89641a4582/3/2/3263670138016.1-0001.jpg']

【讨论】:

  • 对于图像,我收到此错误:无法找到元素://*[@id="maincontent"]/div[2]/div[2]/div[2] /div/div[2]/div[2]/div[1]/div[3]/div[1]/img.另外,在这里使用 xpath 是个好主意吗?我需要对本网站上的更多页面执行此操作。
  • 关于文本,我尝试了同样的事情,但使用 find_by_id' - 为什么它不起作用?也不能使用 xpath...
  • @DavidRotenberg 请尝试我的第二个解决方案,使用class
  • @DavidRotenberg "我尝试了同样的事情,但使用 find_by_id" - 你必须发布整个代码让我了解它为什么不起作用,否则我将无法提供帮助跨度>
  • 我累了,不工作了...如果有问题,我正在使用 Firefox
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2023-03-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-07-05
  • 1970-01-01
  • 2021-09-26
相关资源
最近更新 更多