ElementHandle.Jeval()
我正在尝试style
通过Pyppeteer
. 但问题是我只能解决元素,xpath
因为元素class
是dynamically 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
但是,我不想这样做。如果有人有更好的方法,请告诉我。谢谢。