python - 如何使用 BeautifulSoup 发送密钥
问题描述
我用 selenium 创建了一个脚本来获取给定的GST NUMBER信息。我完成了那个程序,它给了我所需的输出细节,没有任何问题。
现在我不想再与 chrome 浏览器交互了,所以我试图用 BeautilfulSoup 来做这件事。
BeautifulSoup 对我来说是新的,所以我不太想找到元素,我搜索了很多关于如何使用 BeautifulSoup 发送密钥的信息,但我没有得到它。
现在我的脚本被困在这里。
from bs4 import BeautifulSoup
import requests
import urllib.request as urllib2
quote_page = 'https://my.gstzen.in/p/search-taxpayer'
page = urllib2.urlopen(quote_page)
soup = BeautifulSoup(page, 'html.parser')
现在,即使我设法找到了 gst 输入元素,我也想知道如何将密钥发送给它?例如带有发送输入按钮代码或单击“搜索 GST 详细信息”的 15 位 GST 号码。
如果可能,请告诉我解决方案,以便我开始研究它。
实际上,我今晚需要完成这个。
另外,这是我的脚本,它可以轻松地用 selenium 做同样的事情,我想用 BeautilfulSoup 做同样的事情,因为我不希望每次检查 GST 时都运行 chrome,而 BeautilfulSoup 似乎很有趣。
import selenium
import time
from selenium import webdriver
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.common.keys import Keys
import csv
import requests
#import pyvirtualdisplay
#from pyvirtualdisplay import display
#display = Display(visible=0, size=(800, 600))
#display.start()
browser = webdriver.Chrome('E:\\Chrome Driver\\chromedriver_win32\\chromedriver.exe')
browser.set_window_position(-10000,0)
browser.get('https://my.gstzen.in/p/search-taxpayer/')
with open ('product.csv') as csv_file:
csv_reader = csv.reader(csv_file, delimiter=',')
next(csv_reader)
for row in csv_reader:
name, phone = row
time.sleep(1)
gst = browser.find_element_by_name('gstin')
gst.click()
gst.send_keys(name)
time.sleep(1)
Details = browser.find_element_by_xpath("//*[contains(text(), ' Search GSTIN Details')]")
Details.click()
info = browser.find_element_by_class_name('col-sm-4')
print(info.text)
info2 = browser.find_element_by_xpath('/html/body/div[4]/div/div/div[1]/div[2]/div[2]/div[1]/div[2]')
print(info2.text)
input('Press Enter to quit')
browser.quit()
解决方案
BeautifulSoup 是一个用于解析和格式化的库,不与网页交互。对于后者,如果该页面需要 JavaScript 才能工作,那么您将无法使用无头浏览器。
如果没有,您至少有两个选择:
- 在浏览器的开发人员工具中查看网络选项卡,看看是否可以为要使用的页面重新创建请求,
requests
或者urllib2
- Use
mechanize
,专为在不依赖 JavaScript 的网站上处理表单而构建
mechanize
如果没有 CSRF 令牌或类似机制,工作量会多一点(不过,如果需要 JavaScript,它会再次失败),如果有,工作量会少一点。
推荐阅读
- javascript - 比较两个对象并替换通用对象属性
- asp.net-core - InvalidCastException:无法将“System.Double”类型的对象转换为“System.Single”类型
- javascript - API Binance 获取免费余额
- postgresql - Postgres - 确定更新的列名
- sql - 在这种情况下,“日”表是个好主意吗?
- wordpress - 当我输入 wordpress https://example.com/wp-comments-post.php 时,我收到 http 405 错误。404重定向不发生
- python - python - 日期时间 x 绘图失真问题
- apache-kafka - 以分布式模式启动 Kafka 连接时出错
- javascript - 如何限制或改进执行 CPU 密集型终端命令的节点脚本
- reactjs - 反应钩子如何改变数组对象的属性