Uzupełnianie formularza wywala błąd: 0x800A01B6

Uzupełnianie formularza wywala błąd: 0x800A01B6
  • Rejestracja: dni
  • Ostatnio: dni
0

Witam,

Kopiuj
string[] csv = Regex.Split(File.ReadAllText(dlg.FileName).Replace("\"", ""), "\n");
                for (int i = 0; i < csv.Length-1; i++)
                {
                    string[] csvline = Regex.Split(csv[i],";");
                    for (int j = 0; j < csvline.Length; j++)
                    {
                        dynamic d = wb.Document;
                        
                        if (d.readyState == "complete")
                        {
                            d.getElementById("parcel_form_trucker_type_recipientName").value = csvline[0];
                            d.getElementById("parcel_form_trucker_type_recipient_street").value = csvline[1];
                            d.getElementById("parcel_form_trucker_type_recipient_houseNumber").value = csvline[2];
                            d.getElementById("parcel_form_trucker_type_recipient_flatNumber").value = csvline[3];
                            d.getElementById("parcel_form_trucker_type_recipient_zipCode").value = csvline[4];
                            d.getElementById("parcel_form_trucker_type_recipient_city").value = csvline[5];
                            d.getElementById("parcel_form_trucker_type_recipient_phone").value = csvline[6];
                            d.getElementById("parcel_form_trucker_type_recipient_email").value = csvline[7];
                        }
                    }
                }

Z tego co zauważyłem błąd wyskakuje tylko w przypadku, gdy robię jakiekolwiek odwołanie do wb.document albo d.
Uprzedzam z góry - jestem "bardzo" zielony w C#.

Kopiuj
An unhandled exception of type 'System.NotSupportedException' occurred in System.Dynamic.dll
Additional information: Wyjątek od HRESULT: 0x800A01B6

Prosiłbym o szczegółową pomoc :)

Pozdrawiam.

xeo545x39
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Kosmos
  • Postów: 1571
0

0x800a01b6 To błąd JavaScript runtime error: Object doesn't support property or method. Problem może tkwić w tym, że brakuje doładowanych jakichś bibliotek może z poziomu takiego dostępu do Document. Albo po prostu skrypt w Documencie jest zepsuty i faktycznie tam się wywala. Pytanie czy normalnie się nie wywala.

  • Rejestracja: dni
  • Ostatnio: dni
0

Dzięki za odpowiedź, niestety nie jestem w stanie sam zlokalizować błędu, a tym bardziej go naprawić.

Aktualnie skrypt ma za zadanie logować się (skrypt do logowania poniżej)

Kopiuj
        public MainWindow()
        {
            InitializeComponent();

            wb.Navigate("http://smartbiz.inpost.pl/login");
        }

        private void Button_login(object sender, RoutedEventArgs e)
        {
            dynamic d = wb.Document;
            if (d.readyState == "complete")
            {
                d.getElementById("username").value = "XXXloginXXX";
                d.getElementById("password").value = "XXXhasloXXX";
                d.getElementById("remember_me").click();
                d.getElementById("_submit").click();

                wb.Navigate("https://smartbiz.inpost.pl/dispatch/parcel/letter-parcel");

                btn_file.IsEnabled = true;
            }
        }

W powyższym przypadku wszystko działa jak powinno beż najmniejszego błędu.
Siedziałem przy tym szukając błędu prawie cały dzień, niestety sam nie dałem rady nic wykombinować.
Tak samo przeszukując internet nie dałem rady znaleźć nic konkretnego.

Napisałeś, że brakować może jakiejś biblioteki JS, tak?
Jest jakiś sposób, by to sprawdzić?

Poniżej "cały" skrypcik, który ma uzupełniać formularz:

Kopiuj
private void Button_file(object sender, RoutedEventArgs e)
        {
            OpenFileDialog dlg = new OpenFileDialog(); 
            dlg.DefaultExt = ".csv";
            dlg.Filter = "CSV (*.csv)|*.csv";
            Nullable<bool> result = dlg.ShowDialog();
            if (result == true)
            {
                string results = "";
                string[] csv = Regex.Split(File.ReadAllText(dlg.FileName).Replace("\"", ""), "\n");
                for (int i = 0; i < csv.Length-1; i++)
                {
                    string[] csvline = Regex.Split(csv[i],";");
                    for (int j = 0; j < csvline.Length; j++)
                    {
                        dynamic d = wb.Document;
                        
                        if (d.readyState == "complete")
                        {
                            d.getElementById("parcel_form_trucker_type_recipientName").value = csvline[0];
                            d.getElementById("parcel_form_trucker_type_recipient_street").value = csvline[1];
                            d.getElementById("parcel_form_trucker_type_recipient_houseNumber").value = csvline[2];
                            d.getElementById("parcel_form_trucker_type_recipient_flatNumber").value = csvline[3];
                            d.getElementById("parcel_form_trucker_type_recipient_zipCode").value = csvline[4];
                            d.getElementById("parcel_form_trucker_type_recipient_city").value = csvline[5];
                            d.getElementById("parcel_form_trucker_type_recipient_phone").value = csvline[6];
                            d.getElementById("parcel_form_trucker_type_recipient_email").value = csvline[7];
                        }
                        results += csvline[j] + "\n";
                    }
                    results += "\n**\n";
                }
                MessageBox.Show(results);
            }
        }

W powyższym skrypcie (nie licząc tego błędu) powinno brakować tylko "kliknięcia" submit'a.

Jakieś rady? Może rozwiązanie? :(

Pozdrawiam.

  • Rejestracja: dni
  • Ostatnio: dni
0
Krzywy Lew napisał(a):

Dzięki za odpowiedź, niestety nie jestem w stanie sam zlokalizować błędu, a tym bardziej go naprawić.

Aktualnie skrypt ma za zadanie logować się (skrypt do logowania poniżej)

Kopiuj
        public MainWindow()
        {
            InitializeComponent();

            wb.Navigate("http://smartbiz.inpost.pl/login");
        }

        private void Button_login(object sender, RoutedEventArgs e)
        {
            dynamic d = wb.Document;
            if (d.readyState == "complete")
            {
                d.getElementById("username").value = "XXXloginXXX";
                d.getElementById("password").value = "XXXhasloXXX";
                d.getElementById("remember_me").click();
                d.getElementById("_submit").click();

                wb.Navigate("https://smartbiz.inpost.pl/dispatch/parcel/letter-parcel");

                btn_file.IsEnabled = true;
            }
        }

W powyższym przypadku wszystko działa jak powinno beż najmniejszego błędu.
Siedziałem przy tym szukając błędu prawie cały dzień, niestety sam nie dałem rady nic wykombinować.
Tak samo przeszukując internet nie dałem rady znaleźć nic konkretnego.

Napisałeś, że brakować może jakiejś biblioteki JS, tak?
Jest jakiś sposób, by to sprawdzić?

Poniżej "cały" skrypcik, który ma uzupełniać formularz:

Kopiuj
private void Button_file(object sender, RoutedEventArgs e)
        {
            OpenFileDialog dlg = new OpenFileDialog(); 
            dlg.DefaultExt = ".csv";
            dlg.Filter = "CSV (*.csv)|*.csv";
            Nullable<bool> result = dlg.ShowDialog();
            if (result == true)
            {
                string results = "";
                string[] csv = Regex.Split(File.ReadAllText(dlg.FileName).Replace("\"", ""), "\n");
                for (int i = 0; i < csv.Length-1; i++)
                {
                    string[] csvline = Regex.Split(csv[i],";");
                    for (int j = 0; j < csvline.Length; j++)
                    {
                        dynamic d = wb.Document;
                        
                        if (d.readyState == "complete")
                        {
                            d.getElementById("parcel_form_trucker_type_recipientName").value = csvline[0];
                            d.getElementById("parcel_form_trucker_type_recipient_street").value = csvline[1];
                            d.getElementById("parcel_form_trucker_type_recipient_houseNumber").value = csvline[2];
                            d.getElementById("parcel_form_trucker_type_recipient_flatNumber").value = csvline[3];
                            d.getElementById("parcel_form_trucker_type_recipient_zipCode").value = csvline[4];
                            d.getElementById("parcel_form_trucker_type_recipient_city").value = csvline[5];
                            d.getElementById("parcel_form_trucker_type_recipient_phone").value = csvline[6];
                            d.getElementById("parcel_form_trucker_type_recipient_email").value = csvline[7];
                        }
                        results += csvline[j] + "\n";
                    }
                    results += "\n**\n";
                }
                MessageBox.Show(results);
            }
        }

W powyższym skrypcie (nie licząc tego błędu) powinno brakować tylko "kliknięcia" submit'a.

Jakieś rady? Może rozwiązanie? :(

Pozdrawiam.

Edit: Zapomniałem wspomnieć o fakcie, iż po odpaleniu tej strony za pomocą Internet Explorer'a wszystko działa jak powinno.

  • Rejestracja: dni
  • Ostatnio: dni
0

Edit2: Wpisywanie własnoręcznie danych do formularza poprzez okno programu także działa.
Jedyne co nie działa to te automatyczne uzupełnianie.

  • Rejestracja: dni
  • Ostatnio: dni
0

Edit3: Zrzuty ekranu jak to wygląda po stronie programu:

xeo545x39
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Kosmos
  • Postów: 1571
0

Czyli pierwszy kod z logowaniem działa z wb.Document, a już drugi z tym samym przy próbie dostępu do tego obiektu się wywala?

  • Rejestracja: dni
  • Ostatnio: dni
0

Dokładnie tak.
Siedziałem i szukałem rozwiązania od 2 dni i nic :(
Jakieś pomysły?

Pozdrawiam.

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.