【问题标题】:Selecting a element by it's css selector in puppeteer在 puppeteer 中通过它的 css 选择器选择一个元素
【发布时间】:2022-01-09 02:44:20
【问题描述】:

我正在尝试使用其样式选择器来选择图像元素。我用 Python 编写了这行代码,但在将其转换为 JavaScript 时遇到了问题。到目前为止,这是我的尝试。请注意 python 代码有效。这是我遇到问题的js。

if driver.find_element_by_css_selector("img[style='object-fit: cover;']") is not None:
        download_url = driver.find_element_by_css_selector("img[style='object-fit: cover;']").get_attribute('src')

这是我的 js 尝试。

let imageArr = []

for(let post of posts) {
    await page.goto(post)
    await page.waitForTimeout(6000)

    if (await page.type("img[style='object-fit: cover;']") !== null) {

        const image = await page.evaluate(() => {
            document.querySelectorAll("img[style='object-fit: cover;']").forEach(img => {
                let imageUrl = img.getAttribute('src');
                imageArr.push(imageUrl)
            })
        })
    }
}

【问题讨论】:

  • 要让这个querySelectorAll("img[style='object-fit: cover;']") 匹配元素,这些图像元素必须具有该样式(并且仅该样式) 内嵌准确的间距和分号。是这样吗?
  • @Kinglish 是的。没错

标签: javascript python selenium puppeteer


【解决方案1】:

我认为你需要使用* CSS 属性选择器,来自MDN

[attr*=value] - 表示属性名称为 attr 的元素,其值包含字符串中至少出现一次的值。

所以对于您的 Javascript 代码,我相信这会起作用:

let imageArr = []

for(let post of posts) {
    await page.goto(post)
    await page.waitForTimeout(6000)

    if (await page.type("img[style*='object-fit: cover;']") !== null) {

        const image = await page.evaluate(() => {
            document.querySelectorAll("img[style*='object-fit: cover;']").forEach(img => {
                let imageUrl = img.getAttribute('src');
                imageArr.push(imageUrl)
            })
        })
    }
}

这将选择字符串中至少出现一次object-fit: cover; 的所有img 元素。

【讨论】:

  • Python 代码是正确的。我正在将其翻译成 javascript。我将编辑问题以明确这一点。
  • 我误读了这个问题,我的错。我更改了答案以添加 Javascript 代码。
  • 对不起,@Milo Fultz。我得到同样的错误,我仍然得到。我认为您的代码与我的相似。哪个有问题。
  • 如果您共享您正在抓取的页面和所需的输出,那么验证任何建议的解决方案会容易得多。否则,它几乎是盲目的。 await page.waitForTimeout(6000) 通常是一个错误。最好waitForFunctionwaitForSelector
猜你喜欢
  • 2015-09-12
  • 2020-05-24
  • 2020-09-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-07-20
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多