0

ElementHandle.Jeval()我正在尝试style通过Pyppeteer. 但问题是我只能解决元素,xpath因为元素classdynamically generated.

但是,要求ElementHandle.Jeval()作为selector参数之一。

我试过了:

element = await iframe.Jx('//*[@id="root"]/main/div[1]/div/div[9]/div[1]/div[2]/div[2]/div/div[2]')
style = await element[0].Jeval(pageFunction='node => node.getAttribute("style")')

它仍然需要选择器。我试图get selector从我通过 xpath 寻址的 ElementHandle 中找到一种方法,但没有找到允许我这样做的方法。

和:

xpath = '//*[@id="root"]/main/div[1]/div/div[9]/div[1]/div[2]/div[2]/div/div[2]'
style = await iframe.Jeval(xpath, pageFunction='node => node.getAttribute("style")')
-------------------------------
raise ElementHandleError('Evaluation failed: {}'.format(
pyppeteer.errors.ElementHandleError: Evaluation failed: DOMException: Failed to execute 'querySelector' on 'Document': '//*[@id="root"]/main/div[1]/div/div[9]/div[1]/div[2]/div[2]/div/div[2]' is not a valid selector.
at __pyppeteer_evaluation_script__:1:33

如果有人能弄清楚这一点,请告诉我。谢谢。

- - - - - - - - -更新 - - - - - - - -

我通过编辑源代码弄清楚了:

#!element_handle.py
# elementHandle = await self.querySelector(selector)
elementHandle = selector
if not elementHandle:
    raise ElementHandleError(
        f'Error: failed to find element matching selector "{selector}"'
    )
result = await self.executionContext.evaluate(
    pageFunction, elementHandle, *args)
await elementHandle.dispose()
return result

但是,我不想这样做。如果有人有更好的方法,请告诉我。谢谢。

4

0 回答 0