0

The code below results in a timeout error on line 22. The page it gets hung up on loads fine. I don't think the "click" is working for whatever reason. I checked out this question and it didn't help: Navigating to "url", waiting until "load" - Python Playwright Issue

My goal is to download the csv file. I can't directly link to it since it's dependent on information entered during a user's session.

from playwright.sync_api import Playwright, sync_playwright, expect


def run(playwright: Playwright) -> None:
    browser = playwright.chromium.launch(headless=False)
    context = browser.new_context()

    # Open new page
    page = context.new_page()

    # Go to https://www.elections.il.gov/CampaignDisclosure/ContributionSearchByCommittees.aspx?T=637994490317517425
    page.goto("https://www.elections.il.gov/CampaignDisclosure/ContributionSearchByCommittees.aspx?T=637994490317517425")

    # Click input[name="ctl00\$ContentPlaceHolder1\$txtCmteID"]
    page.locator("input[name=\"ctl00\\$ContentPlaceHolder1\\$txtCmteID\"]").click()

    # Fill input[name="ctl00\$ContentPlaceHolder1\$txtCmteID"]
    page.locator("input[name=\"ctl00\\$ContentPlaceHolder1\\$txtCmteID\"]").fill("34589")
    
    # Click input:has-text("Search")
    page.locator("input:has-text(\"Search\")").click()
    page.wait_for_url("https://www.elections.il.gov/CampaignDisclosure/ContributionSearchByCommittees.aspx?txtCmteID=%2fVrwBYk8TlTSLyRmy7TWmQ%3d%3d&ddlVendorState=Ry707kcsXsM%3d&ddlContributionType=wOGh3QTPfKqV2YWjeRmjTeStk426RfVK&ddlState=Ry707kcsXsM%3d&ddlFiledDateTime=Ry707kcsXsM%3d&ddlFiledDateTimeThru=Ry707kcsXsM%3d&T=637999702238350506")

    # Click text=Download This List
    page.locator("text=Download This List").click()
    page.wait_for_url("https://www.elections.il.gov/CampaignDisclosure/DownloadList.aspx?T=637999702324593366")

    # Click text=CSV File
    with page.expect_download() as download_info:
        page.locator("text=CSV File").click()
    download = download_info.value

    # ---------------------
    context.close()
    browser.close()


with sync_playwright() as playwright:
    run(playwright)

Copy of error message:

Exception has occurred: TimeoutError
Timeout 30000.0ms exceeded.
=========================== logs ===========================
waiting for navigation to "https://www.elections.il.gov/CampaignDisclosure/ContributionSearchByCommittees.aspx?txtCmteID=%2fVrwBYk8TlTSLyRmy7TWmQ%3d%3d&ddlVendorState=Ry707kcsXsM%3d&ddlContributionType=wOGh3QTPfKqV2YWjeRmjTeStk426RfVK&ddlState=Ry707kcsXsM%3d&ddlFiledDateTime=Ry707kcsXsM%3d&ddlFiledDateTimeThru=Ry707kcsXsM%3d&T=637999702238350506" until 'load'
Adam
  • 315
  • 1
  • 11

1 Answers1

0

I guess you are using codegen probably.

That page is a little bit strange for urls as I can see.

Anyways, I fixed your code:

from playwright.sync_api import Playwright, sync_playwright, expect


def run(playwright: Playwright) -> None:
    browser = playwright.chromium.launch(headless=False)
    context = browser.new_context()

    # Open new page
    page = context.new_page()

    # Go to https://www.elections.il.gov/CampaignDisclosure/ContributionSearchByCommittees.aspx?T=637994490317517425
    page.goto(
        "https://www.elections.il.gov/CampaignDisclosure/ContributionSearchByCommittees.aspx")

    # Fill input[name="ctl00\$ContentPlaceHolder1\$txtCmteID"]
    page.locator("input[name=\"ctl00\\$ContentPlaceHolder1\\$txtCmteID\"]").fill("34589")

    page.locator("input:has-text(\"Search\")").click()

    page.locator("text=Download This List").click()

    # Click text=CSV File
    with page.expect_download() as download_info:
        page.locator("text=CSV File").click()
    download = download_info.value
    download.save_as(download.suggested_filename)


    # ---------------------
    context.close()
    browser.close()


with sync_playwright() as playwright:
    run(playwright)
Jaky Ruby
  • 1,409
  • 1
  • 7
  • 12
  • Thank you! Yes, I was using codegen -- it was my first time using playwright. This code gets farther - to the point where it starts downloading the desired CSV file. But the script aborts before the download is finished. Any thoughts on how to keep the script open? I see from the documentation we shouldn't use the `sleep()` function. – Adam Oct 12 '22 at 19:12
  • @Adam mmm with that code should be enough. File should be saved in the same path where the .py file is being executed. For me is being saved with the name Receipts.csv – Jaky Ruby Oct 14 '22 at 20:43