Невозможно понять, что не так с некоторыми python веб-скребками, у которых по-прежнему возникают проблемы с синтаксисом "строки" - PullRequest
0 голосов
/ 06 августа 2020

У нас возникли проблемы с запуском некоторых python веб-скребков. Ниже приводится ошибка, которую мы получаем:

browser loaded
Page loaded
{'Date': 'Wed, 05 Aug 2020 21:06:56 GMT', 'Content-Type': 'application/pdf', 'Content-Length': '310266', 'Connection': 'keep-alive', 'Cache-Control': 'public, max-age=7776000', 'Expires': 'Tue, 03 Nov 2020 22:06:54 GMT', 'Last-Modified': 'Wed, 29 Jul 2020 23:27:39 GMT', 'Server': 'Microsoft-IIS/10.0', 'Content-Disposition': 'inline; filename=weekly_building_permits_issued.pdf', 'X-AspNet-Version': '4.0.30319', 'Access-Control-Allow-Origin': '*', 'X-Powered-By': 'ASP.NET'}
<_io.BufferedWriter name='/bm_data/ownCloud/BuildMapper/acquireddata/2020-08-05 21.06.54 - delta.pdf'>
Traceback (most recent call last):
  File "delta.py", line 21, in <module>
    savefile(pdf_url,"delta","pdf")
  File "/home/ubuntu/buildmapper/scripts/classes/main.py", line 83, in savefile
    s3.meta.client.upload_file(outfile, S3_BUCKET, outfile)
  File "/home/ubuntu/.local/lib/python3.6/site-packages/boto3/s3/inject.py", line 131, in upload_file
    extra_args=ExtraArgs, callback=Callback)
  File "/home/ubuntu/.local/lib/python3.6/site-packages/boto3/s3/transfer.py", line 273, in upload_file
    raise ValueError('Filename must be a string')
ValueError: Filename must be a string

Я понимаю, что ошибка вызвана тем, что имя файла не является строкой, но у меня возникли проблемы с определением того, откуда эта проблема.

Ниже приведен код из файла проблемы python:


#Opening website 
url = "http://www.delta.ca/services/permits-licences/building-plumbing-permits"

with Display(visible=False, size=(1200,1500)):
  print("display initiated")
  browser.get(url)
  print("browser loaded")
  
  #Wait for page to load
  wait.until(EC.presence_of_element_located((By.ID, 'Body')))
  print("Page loaded")
  
  browser.find_element_by_xpath('//a[@id="ctl00_Content_C002_ctl00_ctl00_ctl00_listsControl_ctrl0_listItemsControl_ctrl0_listItemToggleLnk"]').click()
  
  base_url = "www.delta.ca"
  
  pdf_url = browser.find_element_by_xpath('//div[@id="ctl00_Content_C002_ctl00_ctl00_ctl00_listsControl_ctrl0_listItemsControl_ctrl0_listItemContent"]/ul/li/a').get_attribute("href")
  
  savefile(pdf_url,"delta","pdf")

print("end of code")
browser.quit()

Если есть дополнительная информация, которая могла бы помочь, я был бы более чем счастлив предоставить ее.

Спасибо!

1 Ответ

0 голосов
/ 06 августа 2020

Вы извлекаете href и используете его в качестве имени файла. Вы ожидаете, что это будет строка, но не проверяете ее. Возможно, элемент, который вы ищете, не существует, не существует по этому xpath или у него нет атрибута href. Вам необходимо учитывать возможность того, что pdf_url оценивается как None.

...
pdf_url = browser.find_element_by_xpath(...).get_attribute("href")
if pdf_url:
    savefile(pdf_url,"delta","pdf")
else:
    print('no href found')
...