Selenium代码在主笔记本上正常,但在其他电脑上不行
我去年在Pycharm写了一些代码,用来循环检查输入到政府网站上的增值税号码,确保它们仍然有效。在我原来的笔记本上,这段代码运行得很好,但在我的另一台笔记本上却不行,尽管代码完全一样(唯一的调整是电子表格的位置)。我把我的代码放在下面。当我在另一台笔记本上运行时,出现了以下错误。
Traceback (most recent call last):
File "C:\Users\neils\Documents\Pycharm Projects\VATChecker\VATChecker.py", line 30, in <module>
VAT = web.find_element_by_xpath('//*[@id="target"]')
^^^^^^^^^^^^^^^^^^^^^^^^^
AttributeError: 'WebDriver' object has no attribute 'find_element_by_xpath'
Process finished with exit code 1
我还注意到,import sys和import datetime这两行代码是灰色的。我猜这是因为在使用这些导入之前程序就崩溃了?
我应该提一下,两台笔记本上的Chrome版本是一样的(版本123),而且我在两台上都安装了相同的chromedriver。两台笔记本都是64位的Windows,以防你觉得这可能是问题所在。
你能告诉我问题出在哪里吗?
import datetime
import sys
from selenium import webdriver
from openpyxl import workbook, load_workbook
from datetime import date
web = webdriver.Chrome()
wb = load_workbook('C:\\Users\\neils\\Documents\\NSO\\Self Billing agreements\\VATMusiciansCheckerUK.xlsx', data_only=True, read_only=False)
ws = wb.active
x=2
y=1
current_datetime = datetime.datetime.now()
current_datetime.strftime('%x %X')
invalid = ""
while ws.cell(x,1).value !=None:
ws.cell(x,9).value = ""
web.get("https://www.tax.service.gov.uk/check-vat-number/enter-vat-details")
web.implicitly_wait(10)
VatNumber = ws.cell(x,4).value
VAT = web.find_element_by_xpath('//*[@id="target"]')
VAT.send_keys(VatNumber)
VAT.submit()
web.implicitly_wait(4)
registered = web.find_element_by_xpath('/html/body/div[2]')
if (registered.text.find("Invalid")) > 0:
ws.cell(x,9).value = "Invalid VAT number"
invalid = invalid + str(y) + " " + ws.cell(x,1).value + " " + ws.cell(x,2).value + ", "
y=y+1
else:
ws.cell(x,9).value = "Valid VAT number"
ws.cell(x,6).value = current_datetime
x=x+1
if invalid == "":
print("All VAT records are correct")
else:
print("Invalid VAT records are " + invalid)
wb.save('C:\\Users\\neils\\Documents\\NSO\\Self Billing agreements\\VATMusiciansCheckerUK.xlsx')
2 个回答
0
你的代码使用了一些已经被淘汰的方法,这些方法在Selenium 4.3.0版本中被移除了;具体可以查看这个链接:https://github.com/SeleniumHQ/selenium/blob/trunk/py/CHANGES。
你可以选择用 pip install
安装一个旧版本的Selenium来解决这个问题。但更好的办法是修改你的代码,把那些被淘汰的方法替换成 web.find_element(...)
这种调用,具体的做法可以参考当前的Selenium文档。
另外,创建一个“requirements.txt”文件来管理你的代码依赖也是个好主意,这样可以限制Selenium这个Python库的版本。
我猜测你两台笔记本电脑表现不同的原因是因为你们安装了不同版本的Selenium库。(如果你不限制库的版本,pip
默认会安装最新版本。)
0
使用
web.find_element(By.XPATH, "xpath")
而不是
web.find_element_by_xpath("xpath")
别忘了添加
from selenium.webdriver.common.by import By
想了解更多,可以参考 这个链接。