当前位置: 首页 > 知识库问答 >
问题:

尝试用Selenium/Beautiful汤提取动态表(url不变)

乜心思
2023-03-14

这是我的代码-

from selenium import webdriver
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from bs4 import BeautifulSoup
from python_anticaptcha import AnticaptchaClient, NoCaptchaTaskProxylessTask
import re
import pandas as pd
import os
import time
import requests

parsed_table_date = []
url = "https://claimittexas.org/app/claim-search"
driver = webdriver.Chrome()
driver.implicitly_wait(15)
driver.get(url)
lastNameField = driver.find_element_by_xpath('//input[@id="lastName"]')
lastNameField.send_keys('Al')
api_key = #MY API key
site_key = '6LeQLyEUAAAAAKTwLC-xVC0wGDFIqPg1q3Ofam5M'  # grab from site
client = AnticaptchaClient(api_key)
task = NoCaptchaTaskProxylessTask(url, site_key)
job = client.createTask(task)
print("Waiting to solution by Anticaptcha workers")
job.join()
# Receive response
response = job.get_solution_response()
print("Received solution", response)
# Inject response in webpage
driver.execute_script('document.getElementById("g-recaptcha-response").innerHTML = "%s"' % response)
# Wait a moment to execute the script (just in case).
time.sleep(1)
# Press submit button
driver.find_element_by_xpath('//button[@type="submit" and @class="btn-std"]').click()
time.sleep(1)
html = driver.page_source
soup = BeautifulSoup(html, "lxml")
table = soup.find("table", { "class" : "claim-property-list" })
table_body = table.find('tbody')
#rows = table_body.find_all('tr')
for row in table_body.findAll('tr'):
    print(row)
    for col in row.findAll('td'):
        print(col.text.strip())

共有1个答案

廉学潞
2023-03-14

您获得的没有要显示的属性。信标如下:

相反,您必须从元素的第二个索引开始迭代:

//tbody/tr[2]/td[2]
//tbody/tr[2]/td[3]
//tbody/tr[2]/td[4]
...
//tbody/tr[3]/td[2]
//tbody/tr[3]/td[3]
//tbody/tr[3]/td[4]
...

因此,您必须在迭代中指定开始索引,如下所示:

rows = driver.find_elements_by_xpath("//tbody/tr")
for row in rows[1:]:
    print(row.text) # prints the whole row
    for col in row.find_elements_by_xpath('td')[1:]:
        print(col.text.strip())
CLAIM # this is button value
37769557 1ST TEXAS LANDSCAPIN 6522 JASMINE ARBOR LANE HOUSTON TX 77088 MOTEL 6 OPERATING LP ACCOUNTS PAYABLE $351.00 2010
37769557
1ST TEXAS LANDSCAPIN
6522 JASMINE ARBOR LANE
HOUSTON
TX
77088
MOTEL 6 OPERATING LP
ACCOUNTS PAYABLE
$351.00
2010
CLAIM # this is button value
38255919 24X7 APARTMENT FIND OF TEXAS 1818 MOSTON DR SPRING TX 77386 NOT DISCLOSED NOT DISCLOSED $88.76 2017
38255919
24X7 APARTMENT FIND OF TEXAS
1818 MOSTON DR
SPRING
...
 类似资料:
  • 我试图使用Selenium从代码中获得jpg。我已经设法找到了链接点击获得我的jpg所在的位置。(真倒霉!我刚接触硒)。所有的窗户都随着它的点击而打开。与刮刮乐相比,它真的很慢,所以如果有人能告诉我一个更快的方法,那就太好了。 我试图搜索的网站是www.rosegal.com。我正在刮的类别是大尺寸的背心。这第一页有60个产品在它。如果单击这些产品,它会将您带到一个产品页面,在该页面上您可以选择所

  • 因此,我一直在努力通过selenium找到一种动态方法,即遍历一个表并从该表中收集特定值,以创建从远程服务到本地数据标签的映射。下面是我试图迭代的代码,这些长度可能会改变: 我确信有一种方法可以在表中进行迭代,以动态的方式收集值,这样应该只需要: 字符串fee**“x”**=driver.findElement(by.xpath(“//tr//input[@id='feed']”)).getAtt

  • 我试图刮所有可用的赔率为每个游戏在这个网页上找到:https://www.sportsbookreview.com/betting-odds/nfl-football/?date=20170917 我知道网页是动态加载的,所以我尝试插入一个滚动条,希望它在滚动时加载所有可用的赔率,但不幸的是,情况似乎并非如此,因为它只是在继续滚动时删除先前加载的数据。 我尝试过实现有这个问题的类似帖子,(比如这个

  • 问题内容: 我有一张表,其中每一行都会有一个下载链接,其中包含(部分)自动生成的id元素。原因是实际的href元素始终为“#”,因此ID分开了下载。 我需要在td中找到该id元素的名称。那就是:我知道表行有一个id元素,并且我知道部分名称,并且我需要获得确切的名称。 我一次访问每一行,因此我一次只需要查看一次即可。无需浏览整个表格。 我知道名称后如何查找元素。但是在我只知道类型的时候找到元素是另一

  • 我刚刚开始学习python。所以在这一章中,基本上是使用硒创建一个价格跟踪器。 下面的照片是我使用selenium试图获得的。 截图 如果我尝试 它显示了红海的线条,没有布赫的信息:没有这样的元素 然后我试着 输出为: 我真的是编程新手...所以我试着在最后使用. text,运气不好! 我怎么做才能得到价格?

  • 所以我一直在寻找和做试验和错误的几天,现在我在这里寻求帮助。 我在我的网站上创建了一个页面,该页面从数据库的表中提取日程信息,并将其显示到网页中。我试图从同一数据库中的第二个表中提取颜色方案,当第一个表上的名称与第二个表上的名称匹配时,只有该名称将以指定给它的不同颜色显示。我的表格如下: 发射型计算机断层扫描仪