Selenium 无法在 ::before ::after 中定位元素

Selenium cant locate element inside ::before ::after

要定位的元素

我正在尝试在网页中定位一个 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)

您无法使用 XPath 定位伪元素,只能使用 CSS 选择器。
我看到它是 FaceBook,名字很丑 class...
我不确定这是否适合您,也许这些 class 名称是动态的,但这次对我有用。
无论如何,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 选择器不起作用,因为那里的 class 名称是动态的 - 尝试用一些稳定的 css_locator 找到 span,这是可能的.只需多试几次,直到您看到哪些 class 名称稳定而哪些不稳定。

更新:
您不需要在那里找到伪元素,足以捕获 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 //span[contains(text(),'isbn')]