我在尝试点击定位器元素时遇到了一个问题。我使用这段代码page.locator('span[dir="auto"]:has-text("See more comments")').all()
来获取与选择器匹配的所有定位器,并且工作正常,因为它检索8个元素。每个元素都显示一个弹出窗口,其中包含我需要的信息,但是使用for循环来遍历每个元素,并尝试在其上创建.click()
,结果是{TimeoutError}TimeoutError('Timeout 30000ms exceeded.')
。即使我尝试点击第一个元素而不检索所有元素,也会导致此错误。我不知道为什么会发生这种情况。希望你能帮助我。代码如下:
from playwright.sync_api import sync_playwright
from mypackages.service import CookiesFacebookService()
from mypackages.utils import Options
class PlaywrightScraper:
def __init__(self):
self.counter = 0
self.cookiesService = CookiesFacebookService()
self.options = Options
@staticmethod
def set_cookie_fb(cookies):
list_keys_cookies = []
for key, value in cookies.items():
cookie_req = {
"path": "/",
"domain": ".facebook.com",
"sameSite": "Lax",
"name": key,
"httpOnly": True,
"secure": True,
"value": value
}
list_keys_cookies.append(cookie_req)
return list_keys_cookies
def prepare_launch_browser(self):
with sync_playwright() as playwright:
return self.launch_playwright(playwright=playwright, options_browser=self.options)
def launch_playwright(self, playwright, options_browser):
user_cookies = self.cookiesService.getAccountFacebook()[0]["reqCookies"] # Here you can just put a valid facebook cookie in JSON format.
browser = playwright.chromium.launch(**options_browser)
page = browser.new_page()
page.context.add_cookies(self.set_cookie_fb(user_cookies))
page.goto("https://www.facebook.com/groups/javascript.react.node", wait_until='load')
page.mouse.wheel(0, 1000)
list_of_locators = page.locator('span[dir="auto"]:has-text("See more comments")').all()
for index in list_of_locators:
load_more_comments = index
if load_more_comments is not None:
page.on("response", self.filter_comment_response)
load_more_comments.click() ##### ERROR TIMEOUT
page.wait_for_load_state('load')
self.counter += 1
def filter_comment_response(self, response):
if response.request.method == "POST" and "api/graphql" in response.request.url:
try:
text_body = response.body().decode('utf-8')
final_text = re.sub(r'\n', ",", text_body)
return final_text
字符串
这是主页中的元素,Ver más respuestas
位于每个帖子中,就像红色圆圈中的这个一样。
通过点击span
元素,它会显示出来,这是一个<div aria-labelledby=":r7q:" role="dialog"
元素,它本身就像一个弹出窗口一样显示出来。
点击那个span
查看更多评论抛出那个TimeoutError。希望能帮到我。
1条答案
按热度按时间zz2j4svz1#
好吧,问题在于你的方法。如果我理解你的问题是,你想得到弹出数据,通过弹出我假设一个悬停元素。代码是在JavaScript中,但逻辑在Python中也是一样的。
字符串
我再一次假设你的弹出窗口是指悬停在元素上,如果你的意思是别的,那么在你的问题中加上这个细节,沿着一些应用程序的截图