剧作家 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)
我不确定这是否对其他人有帮助,但它解决了我的问题。
震惊。
目前正在处理 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 内容的控制台输出。但输出是:
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)
我不确定这是否对其他人有帮助,但它解决了我的问题。
震惊。