执行python fi时不显示输出

2024-06-16 10:10:04 发布

您现在位置:Python中文网/ 问答频道 /正文

获取执行python程序的空白屏幕。在

请帮忙。这可能是一个重复的问题,但我对Python不太了解,因为我是一个Android开发人员。在

这是我的代码:

import sys
import requests
from bs4 import BeautifulSoup, SoupStrainer

home_url = 'https://parivahan.gov.in/rcdlstatus/'
post_url = 'https://parivahan.gov.in/rcdlstatus/vahan/rcDlHome.xhtml'
# Everything before the last four digits: GJ03KA
first = sys.argv[1]
# The last four digits: 0803
second = sys.argv[2]

r = requests.get(url=home_url)
cookies = r.cookies
soup = BeautifulSoup(r.text, 'html.parser')
viewstate = soup.select('input[name="javax.faces.ViewState"]')[0]['value']

data = {
    'javax.faces.partial.ajax':'true',
    'javax.faces.source': 'form_rcdl:j_idt32',
    'javax.faces.partial.execute':'@all',
    'javax.faces.partial.render': 'form_rcdl:pnl_show form_rcdl:pg_show form_rcdl:rcdl_pnl',
    'form_rcdl:j_idt32':'form_rcdl:j_idt32',
    'form_rcdl':'form_rcdl',
    'form_rcdl:tf_reg_no1': first,
    'form_rcdl:tf_reg_no2': second,
    'javax.faces.ViewState': viewstate,
}

r = requests.post(url=post_url, data=data, cookies=cookies)
soup = BeautifulSoup(r.text, 'html.parser')
table = SoupStrainer('tr')
soup = BeautifulSoup(soup.get_text(), 'html.parser', parse_only=table)
print(soup.get_text())

Tags: textimportformurlgethtmlsyspost
3条回答

实际返回有效表单网页的URL是'https://parivahan.gov.in/rcdlstatus/'。在

通过在浏览器中输入示例ID(注册号),错误消息“注册号不存在!!!请核对一下号码。(这完全有道理。我真希望你没有在公众场合公开身份笑)

因为我没有有效的身份证。请看看这能不能解决你的问题。在

另一个需要注意的是,用于输入注册号的字段应该是"form_rcdl:tf_reg_no1""form_rcdl:tf_reg_no2"。您可以查看网页的HTML源代码(例如Chrome中的Ctrl+C)进行验证。在

enter image description here

如果打印出请求post(r)的结果,就会得到500个错误,这是针对服务器错误的通用http响应。我猜是url资源不好或者发布到它的数据格式不正确

请允许我针对这个新的问题提出一个新的答案。在

在尝试了一些仅使用requestsurllib的方法后,我认为使用seleniumwebdriver控制器更好。在

下面的代码将根据需要抓取表行。在

from selenium import webdriver
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By
from selenium.webdriver.chrome.options import Options
from bs4 import BeautifulSoup

url = 'https://parivahan.gov.in/rcdlstatus/'

# Optional: Getting "Headless" browser, ie suppressing the browser window from showing
chrome_options = Options()  
chrome_options.add_argument("--headless")  

# Let the driver open, fill and submit the form
driver = webdriver.Chrome(chrome_options=chrome_options)
driver.get(url)
driver.delete_all_cookies()
wait = WebDriverWait(driver, 10)
wait.until(EC.element_to_be_clickable((By.NAME, 'form_rcdl:j_idt34')))
input1 = driver.find_element_by_name('form_rcdl:tf_reg_no1')
input1.send_keys('GJ03KA')
input2 = driver.find_element_by_name('form_rcdl:tf_reg_no2')
input2.send_keys('0803')
driver.find_element_by_name('form_rcdl:j_idt34').click()
wait = WebDriverWait(driver, 10)

# Get the result table
try:
    element = WebDriverWait(driver, 10).until(
        EC.presence_of_element_located((By.ID, "form_rcdl:j_idt63"))
    )
    result_html = driver.page_source
    #print(result_html)
    soup = BeautifulSoup(result_html, 'lxml')
    print(soup.findAll('tr'))
except TimeoutException:
    driver.quit()
    print('Time out.')

下面演示了在soup中打印出表html标记的结果。在

enter image description here

我希望在你尝试lol之前,政府不要发现并阻止这种方式

希望这有帮助!如果您感兴趣,可以参考以下参考资料:

相关问题 更多 >