【问题标题】:Selenium cant locate element inside ::before ::afterSelenium 无法在 ::before ::after 内定位元素
【发布时间】:2021-05-30 11:21:30
【问题描述】:

要定位的元素

我正在尝试在网页中定位 span 元素,我已尝试使用 XPath 但它引发超时错误,我想在 Facebook 市场产品中定位 title span 元素。 url

这是我的代码:

def title_detector():
    title = WebDriverWait(driver, 10).until(
        EC.presence_of_element_located((By.XPATH, 'path'))).text
    list_data = title.split("ISBN", 1)

【问题讨论】:

    标签: python selenium selenium-webdriver pseudo-element


    【解决方案1】:

    试试这个 xpath //span[contains(text(),'isbn')]

    【讨论】:

    • 没用,我需要更动态的东西
    【解决方案2】:

    您无法使用 XPath 定位伪元素,只能使用 CSS 选择器。
    我看到它是带有丑陋类名的 FaceBook...
    我不确定这对你有用,也许这些类名是动态的,但这次对我有用。
    无论如何,span 元素的 css_locator 是 .dati1w0a.qt6c0cv9.hv4rvrfc.discj3wi .d2edcug0.hpfvmrgz.qv66sw1b.c1et5uql.lr9zc1uh.a8c37x1j.keod5gw0.nxhoafnm.aigsh9s9.qg6bub1s.fe6kdd0r.mau55g9w.c8b282yb.iv3no6db.o0t2es00.f530mmz5.hnhda86s.oo9gr5id
    因此,由于我们试图获取它的 before,我们可以使用以下 JavaScript 脚本来实现:

    span_locator = `.dati1w0a.qt6c0cv9.hv4rvrfc.discj3wi .d2edcug0.hpfvmrgz.qv66sw1b.c1et5uql.lr9zc1uh.a8c37x1j.keod5gw0.nxhoafnm.aigsh9s9.qg6bub1s.fe6kdd0r.mau55g9w.c8b282yb.iv3no6db.o0t2es00.f530mmz5.hnhda86s.oo9gr5id`
    script = "return window.getComputedStyle(document.querySelector('{}'),':before').getPropertyValue('content')".format(span_locator)
    print(driver.execute_script(script).strip())
    

    如果上面的 css 选择器由于类名是动态的而无法工作 - 尝试使用一些稳定的 css_locator 定位 span,这是可能的。只需尝试几次,直到您看到哪些类名是稳定的,哪些不是。

    更新:
    您不需要在那里找到伪元素,就足以捕捉到 span 本身。所以,这样就足够了:

    span_locator = `.dati1w0a.qt6c0cv9.hv4rvrfc.discj3wi .d2edcug0.hpfvmrgz.qv66sw1b.c1et5uql.lr9zc1uh.a8c37x1j.keod5gw0.nxhoafnm.aigsh9s9.qg6bub1s.fe6kdd0r.mau55g9w.c8b282yb.iv3no6db.o0t2es00.f530mmz5.hnhda86s.oo9gr5id`
    def title_detector():
        title = WebDriverWait(driver, 10).until(
            EC.presence_of_element_located((By.CSS_SELECTOR, 'span_locator'))).text
        title = title.strip()
        list_data = title.split("ISBN", 1)
    

    【讨论】:

    • 很抱歉,我只使用 xpath、id 和类选择器,我附上了元素的图片,您可以查看一下。
    • 我试图向您解释 Selenium 无法使用 XPath 定位伪元素(之后和之前)。不是我。
    • 不不,我明白了,没有必要使用xpath,任何返回元素的选择器都可以,
    • 如果有帮助请告诉我?
    • 嗯,它对我不起作用,我得到{错误:无法在“窗口”上执行“getComputedStyle”:参数 1 不是“元素”类型},是的,即使课程看起来是动态的我检查它在其他产品页面,它似乎是一样的。这是否会返回之前的文本:?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-08-14
    • 2018-06-10
    • 2022-01-06
    • 2021-06-21
    • 1970-01-01
    相关资源
    最近更新 更多