剧作家 python 遍历 HTML table

playwright python iterating through HTML table

目前正在处理 HTML table 网页中的数据,如下所示:

我有以下 python 使用编剧的代码:

from config import CLINK_ID, CSA_PWD, MY_URL
from playwright.sync_api import sync_playwright
import time

with sync_playwright() as p:
    browser = p.chromium.launch()
    page = browser.new_page()
    page.goto(MY_URL)
    page.fill('input#username', CLINK_ID)
    page.fill('input#password', CSA_PWD)
    page.click('button.btn.btn-lg.btn-primary.btn-block')
    page.wait_for_load_state()
    page.hover('body > div:nth-child(1) > div.top-menu > div > nav > ul > li:nth-child(3) > a')
    page.click('body > div:nth-child(1) > div.top-menu > div > nav > ul > li:nth-child(3) > ul > li:nth-child(3) > a') # GWL compare
    page.wait_for_load_state()
    page.select_option('#listTable_length > label > select', value="-1") # show all entries
    page.wait_for_load_state(timeout=0)
    table = page.locator('//*[@id="listTable"]')
    row = (table.locator('tr'))
    print(row.locator('td').all_text_contents())  

期望接收包含 table 内容的控制台输出。但输出是: 我很确定日期存在,因为我在使用带有以下代码的 selenium 时收到了预期的结果:

from config import CLINK_ID, CSA_PWD, MY_URL
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
import time
from selenium.webdriver.common.action_chains import ActionChains
from selenium.webdriver.support import expected_conditions as EC

driver=webdriver.Chrome("C:\Users\BF6141\Documents\chromedriver_win32\chromedriver.exe")
url = MY_URL
driver.get(url=url)
driver.find_element_by_xpath('//*[@id="username"]').send_keys(CLINK_ID)
driver.find_element_by_xpath('//*[@id="password"]').send_keys(CSA_PWD)
driver.find_element_by_xpath('/html/body/div/form/button').click()
element_to_hover = driver.find_element_by_xpath('/html/body/div[1]/div[1]/div/nav/ul/li[2]/a')
hover = ActionChains(driver=driver).move_to_element(element_to_hover)
hover.perform()
driver.find_element_by_xpath('/html/body/div[1]/div[1]/div/nav/ul/li[2]/ul/li[3]/a').click() # GWL compare
driver.find_element_by_xpath('//*[@id="listTable_length"]/label/select/option[5]').click() # show all entries
driver.implicitly_wait(3)
table = driver.find_element_by_xpath('//*[@id="listTable"]')
time.sleep(2)
for row in table.find_elements_by_css_selector('tr'):
    for d in row.find_elements_by_css_selector('td'):
        print(d.text)

输出如下:

我希望在剧作家身上看到类似的东西。 我知道我没有使用剧作家代码遍历内容(我不确定该怎么做,因为当我对 select 元素使用定位器并尝试放置一个 for 循环时,它会抛出一个异常定位器对象不可迭代),这是我能做的最远的事情。 我确实尝试遵循剧作家 here 的文档,但没有成功。如果有人对我如何像使用 selenium 那样使用 playwright 获取数据提出建议,将不胜感激。

我可以通过简单地给 launch() 函数一个 slow_mo=300 参数来解决这个问题,所以 browser 变量的代码现在看起来像这样:

browser = p.chromium.launch(slow_mo=300)

我不确定这是否对其他人有帮助,但它解决了我的问题。

震惊。