Не отображается вывод при выполнении файла Python - PullRequest
0 голосов
/ 21 мая 2018

Получение пустого экрана при запуске программы 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())

Ответы [ 4 ]

0 голосов
/ 24 июня 2019

В качестве идентификатора кнопки у вас жестко задан jdt32 ... обратите внимание, что идентификатор кнопки на этом веб-сайте является динамическим .... ваша программа должна динамически подбирать правильный идентификатор кнопки.вот решение

import sys
import re
import requests
from bs4 import BeautifulSoup, SoupStrainer

home_url = 'https://parivahan.gov.in/rcdlstatus/?pur_cd=102'
post_url = 'https://parivahan.gov.in/rcdlstatus/vahan/rcDlHome.xhtml'
# Everything before the last four digits: MH02CL
first = sys.argv[1]
# The last four digits: 0555
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']
#print soup.findAll('button', id=re.compile('form_rcdl^'))
#print soup.findAll('button', id=lambda x: x and x.startswith('form_rcdl'))
i = 0
for match in soup.find_all('button', id=re.compile("form_rcdl")):
  if i ==  0:
    button_id= match.get('id')
  i = 1

data = {
    'javax.faces.partial.ajax':'true',
    'javax.faces.source':button_id,
    'javax.faces.partial.execute':'@all',
    'javax.faces.partial.render': 'form_rcdl:pnl_show form_rcdl:pg_show form_rcdl:rcdl_pnl',
    button_id:button_id,
    '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)
#print (r.text)
soup = BeautifulSoup(r.text, 'html.parser')
table = SoupStrainer('tr')
soup = BeautifulSoup(soup.get_text(), 'html.parser', parse_only=table)
print(soup.get_text())
0 голосов
/ 21 мая 2018

URL, который на самом деле возвращает действительную веб-страницу формы: 'https://parivahan.gov.in/rcdlstatus/'.

При вводе примера кода (регистрационный номер) в браузере появляется сообщение об ошибке «Регистрационный номер не существует !!! Пожалуйста, проверьтечисло."всплывает.(это имеет смысл. Надеюсь, вы не указали настоящий публичный идентификатор) l

Поскольку у меня нет действительного идентификатора для тестирования.Пожалуйста, посмотрите, решит ли это вашу проблему.

Еще одна замеченная вещь заключается в том, что поля для ввода регистрационного номера должны быть "form_rcdl:tf_reg_no1" и "form_rcdl:tf_reg_no2".Вы можете просмотреть исходный HTML-код веб-страницы (например, Ctrl + C в Chrome) для проверки.

enter image description here

0 голосов
/ 21 мая 2018

Позвольте мне открыть новый ответ в ответ на новый вопрос.

После того, как я попробую некоторые методы с requests и urllib, я думаю, что лучше использовать контроллер веб-драйвера selenium.

Следующий код будет захватывать строки таблицы так, как вы хотите.

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.')

Ниже показан результат печати тегов html таблицы в супе.

enter image description here

Я надеюсь, что правительство не обнаружит и не заблокирует этот путь, прежде чем вы попробуете. Lol

Надеюсь, это поможет!При желании вы можете обратиться к следующим ссылкам:

0 голосов
/ 21 мая 2018

Если вы распечатываете результат из поста запросов (r), вы получаете ошибку 500, которая является общим http-ответом для ошибки сервера.Я предполагаю, что ресурс url неверный или данные, размещаемые на нем, отформатированы неправильно

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...