На веб-сайте я нажимаю кнопку, которая открывает небольшое подокно
blockquote>Здесь вы упомянули, что открываете новое подокно, в котором нужно нажать кнопка для скачивания. Но вы не переключаетесь на это окно. Следовательно, не в состоянии найти этот элемент.
Используйте
driver.window_handles
, чтобы получить указатель на открытое окно и переключитесь на это окно, используяdriver.switch_to_window()
, затем попробуйте нажать на кнопку, чтобы загрузить.Вы можете увидеть, как обрабатывать несколько окон в python selenium в этом стековом потоке , ссылка .
РЕДАКТИРОВАТЬ:
Так что, похоже, в вашем коде были некоторые проблемы. Как и локатор для кнопок загрузки рядом с шахматной доской и одна после этого были неправильными. Я исправил локатор с помощью правильного
xpath
, а также внес небольшие изменения вchrome_options
. Вам просто нужно изменитьdownload.defualt_directory
на путь в вашем компьютере, и код ниже будет работать:from selenium import webdriver from selenium.webdriver.chrome.options import Options chrome_options = Options() chrome_options.add_experimental_option("prefs", { "download.default_directory": r"C:\Users\Thanthu Nair\Downloads\Test", "download.prompt_for_download": False, "download.directory_upgrade": True, "safebrowsing.enabled": True }) driver = webdriver.Chrome("./chromedriver", options=chrome_options) website = "https://www.chess.com/ccc" driver.get(website) # loads the page driver.maximize_window() # This closes a sub-window that opens automatically element = driver.find_element_by_class_name("form-button-component") element.click() download = driver.find_element_by_xpath("//i[@title='Download']") download.click() # Click to download download.find_element_by_xpath("//button[normalize-space()='Download Game (PGN)']").click()
Это обходной путь, но я бы, вероятно, просто использовал Makefile, который перезапустил ./mypackage в ./build/mypackage, а затем использовал бы обычный синтаксис distutils изнутри ./build. Дело в том, что distutils ожидает распаковать файл setup.py в корень sdist и иметь там код, так что у вас будет чертовски много времени, чтобы убедить его поступить иначе.
Вы всегда можете обнулить копию, когда очистить, чтобы вам не пришлось испортить ваш VCS.
Какую структуру каталогов вы хотите получить внутри файла архива распространения? Так же, как ваша существующая структура?
Вы можете упаковать все на один каталог выше (код в вашем примере) с этим измененным setup.py:
from distutils.core import setup
setup(
name = 'MyPackage',
description = 'This is my package',
packages = ['mypackage', 'mypackage.subpackage'],
version = '1',
url = 'http://www.mypackage.org/',
author = 'Me',
author_email = 'me@here.com',
script_name = './build/setup.py',
data_files = ['./build/setup.py']
)
You запустили бы это (в code
directory):
python build/setup.py sdist
Или, если вы хотите сохранить dist
внутри сборки:
python build/setup.py sdist --dist-dir build/dist
Мне нравится структура каталогов, которую вы пытаетесь найти. Я никогда не думал, что setup.py
был достаточно особенным, чтобы гарантировать нахождение в папке корневого кода. Но, нравится вам это или нет, я думаю, что именно этого ожидают пользователи вашего дистрибутива. Поэтому неудивительно, что вы должны обмануть distutils, чтобы сделать что-то еще. Параметр data_files
- это хак, чтобы получить ваши настройки.
Возможно, сначала он поменяется на родительский каталог?
import os
os.chdir(os.pardir)
from distutils.core import setup
и т. Д.
Или, может быть, вы запускаете его из любого места (это излишне, но ...):
import os.path
my_path = os.path.abspath(__file__)
os.chdir(os.normpath(os.path.join(my_path, os.pardir)))
и др. Не уверен, что это работает, но это должно быть легко попробовать.
Запустите setup.py из корневой папки проекта
В вашем случае поместите setup.py в код /
код / также должен включать:
Когда вы запускаете setup.py sdist, он должен автоматически сгенерировать МАНИФЕСТ, включающий: - любые файлы, указанные в py_modules и / или пакетах - setup.py - README.txt
Чтобы добавить больше файлов, просто вручную отредактируйте файл МАНИФЕСТА, чтобы включить в него любые другие файлы, которые нужны вашему проекту.
Для приличного объяснения этого прочтите этот .
Чтобы увидеть рабочий пример оформления заказа мой проект .
Примечание. Я не передаю МАНИФЕСТ в управление версиями, поэтому вы не найдете его там.