当前位置: 首页 > 面试题库 >

需要使用python(selenium)删除通过ajax加载的表

赫连智
2023-03-14
问题内容

我有一个包含表格的页面(表格ID =“
ctl00_ContentPlaceHolder_ctl00_ctl00_GV” class =“
GridListings”),我需要剪贴。我通常为此使用BeautifulSoup和urllib,但是在这种情况下,问题在于该表需要花费一些时间来加载,因此当我尝试使用BS来获取该表时不会捕获该表。由于某些安装问题,我无法使用PyQt4,drysracpe或windmill,因此唯一可能的方法是使用Selenium
/ PhantomJS我尝试了以下操作,但仍未成功:

from selenium.webdriver.common.by import By
from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
driver = webdriver.PhantomJS()
driver.get(url)
wait = WebDriverWait(driver, 10)
table = wait.until(EC.presence_of_element_located(By.CSS_SELECTOR, 'table#ctl00_ContentPlaceHolder_ctl00_ctl00_GV'))

上面的代码没有给我所需的表内容。我该如何实现这一目标???


问题答案:

您可以使用 requestbs4, 来获取数据,几乎(如果不是全部)asp站点总是需要提供一些后置参数,例如 EVENTTARGET

EVENTVALIDATION 等。:

from bs4 import BeautifulSoup
import requests

data = {"__EVENTTARGET": "ctl00$ContentPlaceHolder$ctl00$ctl00$RadAjaxPanel_GV",
    "__EVENTARGUMENT": "LISTINGS;0",
    "ctl00$ContentPlaceHolder$ctl00$ctl00$ctl00$hdnProductID": "139",
    "ctl00$ContentPlaceHolder$ctl00$ctl00$hdnProductID": "139",
    "ctl00$ContentPlaceHolder$ctl00$ctl00$drpSortField": "Listing Number",
    "ctl00$ContentPlaceHolder$ctl00$ctl00$drpSortDirection": "A-Z, Low-High",
    "__ASYNCPOST": "true"}

对于实际的帖子,我们需要添加一些其他值以发布帖子数据:

post = "https://seahawks.strmarketplace.com/Charter-Seat-Licenses/Charter-Seat-Licenses.aspx"
with requests.Session() as s:
    s.headers.update({"User-Agent":"Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:47.0) Gecko/20100101 Firefox/47.0"})
    soup = BeautifulSoup(s.get(post).content)

    data["__VIEWSTATEGENERATOR"] = soup.select_one("#__VIEWSTATEGENERATOR")["value"]
    data["__EVENTVALIDATION"] = soup.select_one("#__EVENTVALIDATION")["value"]
    data["__VIEWSTATE"] = soup.select_one("#__VIEWSTATE")["value"]

    r = s.post(post, data=data)
    soup2 = BeautifulSoup(r.content)
    table = soup2.select_one("div.GridListings")
    print(table)

运行代码时,您将看到打印的表格。



 类似资料:
  • 我正在尝试删除图像文件后,填充了关于文件的数据在一个模式。 我的jQuery如下所示: 和我的Coldfusion文件: 这是在我签入网络面板时将作为数据发送,并返回一个200,尽管我看不到cfdump的内容。 我对FE还行,对CF不是那么热,我的猜测是我的CF过于复杂,但也没有做我希望它能做的事情。我确实试着参考了我以前写的一些东西,再加上下面这个: 如何使用Ajax将Javascript变量传

  • 问题内容: 我正在尝试让jsTree与子节点的按需加载一起使用。我的代码是这样的: 调用返回的json是 每个元素可以有很多孩子,树会很大。当前,这将立即加载整个树,这可能需要一些时间。当用户打开子节点时,我该怎么做以实现按需加载? 提前致谢。 问题答案: Irishka向我指出了正确的方向,但并不能完全解决我的问题。我在弄弄她的答案,然后想到了这个。仅为了清楚起见,使用了两个不同的服务器功能。第

  • 问题内容: 好的,所以我对ajax和从外部加载内容还很陌生,希望对我的问题有任何见解。 我目前有一个隐藏的div,它是空的,单击链接后应该在其中加载ajax内容。 我目前有一个链接列表,所有链接都具有相同的类,并且我想在单击空白div时进行幻灯片切换,然后从链接要访问的页面中加载内容。 链接: 当前的jQuery: 刚接触Ajax并加载外部内容时,我想知道如何从位于标签中的链接页面加载内容。因此,

  • 本文向大家介绍python删除不需要的python文件方法,包括了python删除不需要的python文件方法的使用技巧和注意事项,需要的朋友参考一下 最近在看廖老师的python教程,在看到关于文件的操作时,廖老师的其中一段关于查找电脑里的python文件,突然想把之前写的python代码给删除了,因为这是第二次看教程了。 以上这篇python删除不需要的python文件方法就是小编分享给大家的

  • 问题内容: 我正在创建一个浏览大量图片的应用程序。至此,项目的那部分完成了,它对正确的图片进行了排序,过滤和加载,甚至将它们拆分为单独的页面以加快加载速度。 效果很好,但每页加载25张图片仍需要8秒钟以上。我已经进行了一些研究,得出的结论是,使用异步jQuery Ajax请求是最好的方式,以便尽可能快地同时加载所有请求。 到目前为止,这是我的代码: 此代码的问题在于,除了带有灰色边框的空白方形外,

  • 我试图通过插入URL来使用JavaScript获取整个网页。但是,该网站被构建为一个单页面应用程序(SPA),它使用JavaScript/Backbone.js在呈现初始响应后动态加载大部分内容。 例如,当我路由到以下地址时: 然后在控制台中输入以下内容(在页面加载之后): 我在这里尝试了每个标记的内容的解决方案,但它看起来不够健壮,无法实际加载页面: 问:在JavaScript上完全加载网页的选