Latest posts on Заполнения налоговой декларации по доходам от иностранных компаний topichttps://python.su/forum/topic/40535/2021-07-31T10:27:25+03:00Общий :: Python для новичков :: Заполнения налоговой декларации по доходам от иностранных компаний
2021-07-31T10:27:25+03:00EgorSrche217662Здравствуйте, всем.<br/><br/>Пишу скрипт, который должен автоматически заполнять налоговую декларацию по доходам за пределами РФ.<br/>Большая часть скрипт уже написана.<br/>Когда нажимается “добавить источник” не получается найти элемент который раскрывает список, как найти формы в каждом новым источнике, чтобы заполнить их?<br/> <br/><div class="code"><pre> <span class="kn">import</span> <span class="nn">json</span>
<span class="kn">from</span> <span class="nn">bs4</span> <span class="kn">import</span> <span class="n">BeautifulSoup</span>
<span class="kn">import</span> <span class="nn">requests</span> <span class="kn">as</span> <span class="nn">req</span>
<span class="kn">from</span> <span class="nn">selenium</span> <span class="kn">import</span> <span class="n">webdriver</span>
<span class="kn">from</span> <span class="nn">selenium.webdriver.common.keys</span> <span class="kn">import</span> <span class="n">Keys</span>
<span class="kn">from</span> <span class="nn">selenium.webdriver.chrome.options</span> <span class="kn">import</span> <span class="n">Options</span>
<span class="kn">import</span> <span class="nn">os</span><span class="o">,</span> <span class="nn">time</span><span class="o">,</span> <span class="nn">keyboard</span>
<span class="k">def</span> <span class="nf">check</span><span class="p">(</span><span class="n">driver</span><span class="p">):</span>
<span class="n">url</span> <span class="o">=</span> <span class="n">driver</span><span class="o">.</span><span class="n">current_url</span>
<span class="n">time</span><span class="o">.</span><span class="n">sleep</span><span class="p">(</span><span class="mi">2</span><span class="p">)</span>
<span class="k">try</span><span class="p">:</span>
<span class="n">response</span> <span class="o">=</span> <span class="n">req</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">url</span><span class="o">=</span><span class="n">url</span><span class="p">)</span>
<span class="k">print</span><span class="p">(</span><span class="n">f</span><span class="s2">" {url} {response.status_code}"</span><span class="p">)</span>
<span class="k">return</span> <span class="mi">0</span>
<span class="k">except</span> <span class="ne">Exception</span> <span class="k">as</span> <span class="n">ex</span><span class="p">:</span>
<span class="n">check</span><span class="p">(</span><span class="n">driver</span><span class="p">)</span>
<span class="n">path_to_extension</span><span class="o">=</span><span class="sa">r</span><span class="s2">"C:\Users\egor\chromedriver\92.0.4515.43\win32\public_services_1.2.8.0.crx"</span>
<span class="n">options</span> <span class="o">=</span> <span class="n">Options</span><span class="p">()</span>
<span class="n">options</span><span class="o">.</span><span class="n">add_experimental_option</span><span class="p">(</span><span class="s2">"excludeSwitches"</span><span class="p">,</span> <span class="p">[</span><span class="s1">'enable-automation'</span><span class="p">])</span> <span class="c1"># убрать окно</span>
<span class="c1"># options.add_argument('--profile-directory=Profile 2')</span>
<span class="c1"># options.add_argument(r'--C:\Users\egor\chromedriver\92.0.4515.43\win32\public_services_1.2.8.0.crx')</span>
<span class="n">options</span><span class="o">.</span><span class="n">add_extension</span><span class="p">(</span><span class="sa">r</span><span class="s1">'C:\Users\egor\chromedriver\92.0.4515.43\win32\public_services_1.2.8.0.crx'</span><span class="p">)</span>
<span class="n">options</span><span class="o">.</span><span class="n">add_argument</span><span class="p">(</span><span class="s2">"--incognito"</span><span class="p">)</span>
<span class="n">prefs</span> <span class="o">=</span> <span class="p">{</span><span class="s1">'safebrowsing.enabled'</span><span class="p">:</span> <span class="bp">True</span><span class="p">,</span>
<span class="s2">"credentials_enable_service"</span><span class="p">:</span> <span class="bp">False</span><span class="p">,</span>
<span class="s2">"profile.password_manager_enabled"</span> <span class="p">:</span> <span class="bp">False</span><span class="p">,</span>
<span class="c1"># "select_file_dialogs.allowed": False,</span>
<span class="c1"># "download.prompt_for_download": False,</span>
<span class="c1"># "download.directory_upgrade": True,</span>
<span class="c1"># "profile.default_content_setting_values.automatic_downloads": 1,</span>
<span class="c1"># "download_restrictions": 0,</span>
<span class="c1"># "profile.default_content_settings.popups": 0,</span>
<span class="s2">"credentials_enable_service"</span><span class="p">:</span> <span class="bp">False</span><span class="p">,</span>
<span class="s2">"profile.password_manager_enabled"</span><span class="p">:</span> <span class="bp">False</span>
<span class="p">}</span>
<span class="n">options</span><span class="o">.</span><span class="n">add_experimental_option</span><span class="p">(</span><span class="s2">"prefs"</span><span class="p">,</span> <span class="n">prefs</span><span class="p">)</span>
<span class="c1"># options.add_argument('--disable-extensions')</span>
<span class="n">options</span><span class="o">.</span><span class="n">add_argument</span><span class="p">(</span><span class="s1">'--disable-infobars'</span><span class="p">)</span>
<span class="n">options</span><span class="o">.</span><span class="n">add_argument</span><span class="p">(</span><span class="s1">'--safebrowsing-disable-extension-blacklist'</span><span class="p">)</span>
<span class="n">options</span><span class="o">.</span><span class="n">add_argument</span><span class="p">(</span><span class="s1">'--safebrowsing-disable-download-protection'</span><span class="p">)</span>
<span class="k">with</span> <span class="nb">open</span><span class="p">(</span><span class="s2">"password.json"</span><span class="p">,</span> <span class="s2">"r"</span><span class="p">)</span> <span class="k">as</span> <span class="n">json_file</span><span class="p">:</span>
<span class="n">a</span> <span class="o">=</span> <span class="n">json</span><span class="o">.</span><span class="n">load</span><span class="p">(</span><span class="n">json_file</span><span class="p">)</span>
<span class="n">user</span> <span class="o">=</span> <span class="n">a</span><span class="p">[</span><span class="s2">"gos"</span><span class="p">][</span><span class="s2">"user_name"</span><span class="p">]</span>
<span class="n">password_for_gos</span> <span class="o">=</span><span class="n">a</span><span class="p">[</span><span class="s2">"gos"</span><span class="p">][</span><span class="s2">"password"</span><span class="p">]</span>
<span class="k">try</span><span class="p">:</span>
<span class="n">driver</span> <span class="o">=</span> <span class="n">webdriver</span><span class="o">.</span><span class="n">Chrome</span><span class="p">(</span><span class="sa">r</span><span class="s1">'C:\Users\egor\chromedriver\92.0.4515.43\win32\chromedriver.exe'</span><span class="p">,</span> <span class="n">options</span><span class="o">=</span><span class="n">options</span><span class="p">)</span>
<span class="n">driver</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">"https://lkfl2.nalog.ru/lkfl/login"</span><span class="p">)</span>
<span class="k">while</span> <span class="mi">1</span><span class="p">:</span>
<span class="n">time</span><span class="o">.</span><span class="n">sleep</span><span class="p">(</span><span class="mi">1</span><span class="p">)</span>
<span class="k">try</span><span class="p">:</span>
<span class="k">if</span> <span class="n">driver</span><span class="o">.</span><span class="n">find_element_by_class_name</span><span class="p">(</span><span class="s2">"form_link"</span><span class="p">):</span>
<span class="n">p</span><span class="o">=</span> <span class="n">driver</span><span class="o">.</span><span class="n">find_elements_by_class_name</span><span class="p">(</span><span class="s2">"form_link"</span><span class="p">)</span>
<span class="n">p</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span><span class="o">.</span><span class="n">click</span><span class="p">()</span><span class="c1">#вход на госуслуги.</span>
<span class="k">break</span>
<span class="k">except</span><span class="p">:</span>
<span class="k">if</span> <span class="n">driver</span><span class="o">.</span><span class="n">find_element_by_class_name</span><span class="p">(</span><span class="s2">"popup_close"</span><span class="p">):</span>
<span class="n">driver</span><span class="o">.</span><span class="n">find_element_by_class_name</span><span class="p">(</span><span class="s2">"popup_close"</span><span class="p">)</span><span class="o">.</span><span class="n">click</span><span class="p">()</span>
<span class="k">pass</span>
<span class="k">print</span><span class="p">(</span><span class="s2">"close"</span><span class="p">)</span>
<span class="n">time</span><span class="o">.</span><span class="n">sleep</span><span class="p">(</span><span class="mi">1</span><span class="p">)</span>
<span class="n">login_input</span> <span class="o">=</span> <span class="n">driver</span><span class="o">.</span><span class="n">find_element_by_id</span><span class="p">(</span><span class="s2">"login"</span><span class="p">)</span>
<span class="n">login_input</span><span class="o">.</span><span class="n">clear</span><span class="p">()</span>
<span class="n">login_input</span><span class="o">.</span><span class="n">send_keys</span><span class="p">(</span><span class="n">user</span><span class="p">)</span>
<span class="n">password</span> <span class="o">=</span> <span class="n">driver</span><span class="o">.</span><span class="n">find_element_by_id</span><span class="p">(</span><span class="s2">"password"</span><span class="p">)</span>
<span class="n">password</span><span class="o">.</span><span class="n">clear</span><span class="p">()</span>
<span class="n">password</span><span class="o">.</span><span class="n">send_keys</span><span class="p">(</span><span class="n">password_for_gos</span><span class="p">)</span>
<span class="n">driver</span><span class="o">.</span><span class="n">find_element_by_class_name</span><span class="p">(</span><span class="s2">"ufoPC-checkbox"</span><span class="p">)</span><span class="o">.</span><span class="n">click</span><span class="p">()</span><span class="c1"># не запоминать пароль.</span>
<span class="n">check</span><span class="p">(</span><span class="n">driver</span><span class="p">)</span>
<span class="n">driver</span><span class="o">.</span><span class="n">find_element_by_class_name</span><span class="p">(</span><span class="s2">"ui-button"</span><span class="p">)</span><span class="o">.</span><span class="n">click</span><span class="p">()</span><span class="c1"># вход в налоговой кабинет.</span>
<span class="n">check</span><span class="p">(</span><span class="n">driver</span><span class="p">)</span>
<span class="n">driver</span><span class="o">.</span><span class="n">find_element_by_class_name</span><span class="p">(</span><span class="s2">"menu__main"</span><span class="p">)</span><span class="o">.</span><span class="n">find_element_by_class_name</span><span class="p">(</span><span class="s2">"menu_link__report"</span><span class="p">)</span><span class="o">.</span><span class="n">click</span><span class="p">()</span>
<span class="n">check</span><span class="p">(</span><span class="n">driver</span><span class="p">)</span><span class="c1"># жизненные ситуации</span>
<span class="n">driver</span><span class="o">.</span><span class="n">find_element_by_xpath</span><span class="p">(</span><span class="s2">"/html/body/div[1]/div/div[1]/div[3]/div/div[3]/div[1]/div/div/div[3]/div/div[2]/a"</span><span class="p">)</span><span class="o">.</span><span class="n">click</span><span class="p">()</span>
<span class="c1"># 3 ндфл</span>
<span class="n">check</span><span class="p">(</span><span class="n">driver</span><span class="p">)</span>
<span class="n">driver</span><span class="o">.</span><span class="n">find_element_by_class_name</span><span class="p">(</span><span class="s2">"Button_button__blue__Ipe-v"</span><span class="p">)</span><span class="o">.</span><span class="n">click</span><span class="p">()</span><span class="c1"># далее</span>
<span class="n">check</span><span class="p">(</span><span class="n">driver</span><span class="p">)</span>
<span class="n">driver</span><span class="o">.</span><span class="n">find_element_by_id</span><span class="p">(</span><span class="s2">"react-tabs-2"</span><span class="p">)</span><span class="o">.</span><span class="n">click</span><span class="p">()</span><span class="c1"># за пределами РФ</span>
<span class="n">check</span><span class="p">(</span><span class="n">driver</span><span class="p">)</span>
<span class="n">p</span><span class="o">=</span> <span class="n">driver</span><span class="o">.</span><span class="n">find_element_by_class_name</span><span class="p">(</span><span class="s2">"form_buttons"</span><span class="p">)</span><span class="c1">#добавить источник</span>
<span class="n">p</span><span class="o">.</span><span class="n">find_element_by_class_name</span><span class="p">(</span><span class="s2">"src-modules-Taps-components-NDFL3-private-forms-IncomesForm-IncomesOutsideRFComponent-IncomeSources-IncomeSources-module__addButton"</span><span class="p">)</span><span class="o">.</span><span class="n">click</span><span class="p">()</span>
<span class="n">check</span><span class="p">(</span><span class="n">driver</span><span class="p">)</span>
</pre></div>