python - Python + Selenium Web 驱动程序:抓取表数据返回不完整的结果
问题描述
这是我的第一个 python 项目,希望能得到一些帮助。
我正在尝试使用 selenium 创建一个机器人来自动预约。预订网站有一个存储在 css 表中的日历,如下所示:
我正在尝试使用 driver.find_elements_by_xpath 从表中的每个单元格中提取所有文本,但我的代码只返回一些文本元素。
这是我正在使用的代码:
# click specified coordinates on calendar
click_row = 2
click_column = 3
target_date = driver.find_element_by_xpath('//*[@id="app"]/div/div[1]/div[4]/div/table/tbody/tr[' + str(click_row) + ']/td[' + str(click_column) +']')
target_date.click()
这将成功单击 7 月 6 日的日期。但我的最终目标是告诉 Selenium 单击“6”,它会自行找到第 2 行第 3 列,因此我最终将使用日历单元格内的文本编译一个数据框,对应的行和对应的列。这是我用来执行此操作的代码:
#get number of rows and columns in table
row_elements = driver.find_elements_by_xpath('/html/body/div[2]/div/div[1]/div[4]/div/table/tbody/tr')
col_elements = driver.find_elements_by_xpath('//*[@id="app"]/div/div[1]/div[4]/div/table/tbody/tr[1]/td')
num_rows = len(row_elements)
num_cols = len(col_elements)
# list to hold dates
cells_list = []
for i in range(num_rows):#pulls all text in td tags and appends to cell_list
for row in row_elements:
cells = row.find_elements_by_tag_name("td")[i]
cells_list.append(cells.text)
我的代码正确地找到了日历中的行数和列数,但是在我遍历结果并附加到列表“cell_list”之后,它只输入了 25 个值。有关详细信息,请参阅输出和图片。
print('num_rows: ' +str(num_rows))
print('num_cols: ' +str(num_cols))
print(cells_list)
Out:
>>>num_rows: 5
>>>num_cols: 7
>>>['27', '今天', '11', '18', '25', '28', '5', '12', '19', '26', '29', '6', '13', '20', '27', '30', '7', '14', '21', '28', '1', '8', '15', '22', '29']
为什么我的代码没有提取最后两列数据?
这里是网站源代码,参考网站(点击左上角显示日历):
<div class="m-calendar">
<div class="monthWrap">
<div class="arrowWrap"><i class="arrow arrow-left"></i></div>
<p>2021年07月</p>
<div class="arrowWrap arrowWrap-right"><i class="arrow"></i></div>
</div>
<table class="calendarTable">
<thead class="headerWrap">
<tr>
<th class="z-weekend">日</th>
<th class="">一</th>
<th class="">二</th>
<th class="">三</th>
<th class="">四</th>
<th class="">五</th>
<th class="z-weekend">六</th>
</tr>
</thead>
<tbody class="calendarWrap">
<tr>
<td class="z-disabled">
<span>27</span> <!---->
</td>
<td class="z-disabled">
<span>28</span> <!---->
</td>
<td class="z-disabled">
<span>29</span> <!---->
</td>
<td class="z-disabled">
<span>30</span> <!---->
</td>
<td class="">
<span>1</span> <!---->
</td>
<td class="">
<span>2</span> <!---->
</td>
<td class="">
<span>3</span> <!---->
</td>
</tr>
<tr>
<td class="z-today">
<!----> <span>今天</span>
</td>
<td class="">
<span>5</span> <!---->
</td>
<td class="">
<span>6</span> <!---->
</td>
<td class="">
<span>7</span> <!---->
</td>
<td class="z-active">
<span>8</span> <!---->
</td>
<td class="">
<span>9</span> <!---->
</td>
<td class="">
<span>10</span> <!---->
</td>
</tr>
<tr>
<td class="">
<span>11</span> <!---->
</td>
<td class="">
<span>12</span> <!---->
</td>
<td class="">
<span>13</span> <!---->
</td>
<td class="">
<span>14</span> <!---->
</td>
<td class="">
<span>15</span> <!---->
</td>
<td class="">
<span>16</span> <!---->
</td>
<td class="">
<span>17</span> <!---->
</td>
</tr>
<tr>
<td class="">
<span>18</span> <!---->
</td>
<td class="">
<span>19</span> <!---->
</td>
<td class="">
<span>20</span> <!---->
</td>
<td class="">
<span>21</span> <!---->
</td>
<td class="">
<span>22</span> <!---->
</td>
<td class="">
<span>23</span> <!---->
</td>
<td class="">
<span>24</span> <!---->
</td>
</tr>
<tr>
<td class="">
<span>25</span> <!---->
</td>
<td class="">
<span>26</span> <!---->
</td>
<td class="">
<span>27</span> <!---->
</td>
<td class="">
<span>28</span> <!---->
</td>
<td class="">
<span>29</span> <!---->
</td>
<td class="">
<span>30</span> <!---->
</td>
<td class="">
<span>31</span> <!---->
</td>
</tr>
</tbody>
</table>
</div>
解决方案
推荐阅读
- oracle - 将 Oracle jet 切换器插槽动态绑定到 oracle jet 添加和删除选项卡(使切换器插槽在 oracle jet 中动态化)
- javascript - 如何在选择下拉列表中将多个更改为单个
- multithreading - 当工作线程启动时,FMX 主线程中的动画停止
- windows - 来自 Windows 10 的 MASM 出现错误 A2006 - Visual Studio
- javascript - 使用 Jquery:我想在 div 之外放置一个 div
- java - 获取价值的 Json 文件与 DB 表
- google-apps-script - 驱动器中的 Appscript 抛出“抱歉,此时无法打开文件。请检查地址并重试”一周
- salesforce - 如何在 Salesforce 社区上渲染来自 Magnolia CMS 的图像?
- linux - Linux:将两个子字符串连接到使用 cat 读取的 infile 中的新行
- python - Pandas df.mask isnull 得到太多参数错误